mysql查询优化器提示(hint)

浏览: 1271

MySQL中,当我们提交SQL查询时,查询优化器默认选择一些索引来获得最佳的查询计划,有时可能不是最好的,但是可通过使用名为USE INDEX的索引提示来推荐查询优化器应该使用的索引。

一起看下MySQL USE INDEX提示的语法:

SELECT select_list
FROM table_name USE INDEX(index_list)
WHERE condition;

这个语法的作用是,USE INDEX指示查询优化器使用其中一个命名索引来查找表中的行。

零:先看下使用的公开数据

这里我们使用classicmodels数据库中一张customers表来演示我们USE INDEX的使用,先看下customers表结构

customerscustomers一:使用SHOW INDEXES语句显示customers表的所有索引:

 #显示表所有索引
SHOW INDEXES FROM customers;

二:接下来我们一起再创造四个其他的索引

CREATE INDEX idx_c_ln  ON customers(contactLastName);
CREATE INDEX idx_c_fn ON customers(contactFirstName);
CREATE INDEX idx_name_fl  ON customers(contactFirstName,contactLastName);
CREATE INDEX idx_name_lf  ON customers(contactLastName,contactFirstName);

三:查看某个查询语句使用了哪些索引

找到联系人姓名或联系人姓氏的客户以字母A开头。使用EXPLAIN语句检查使用了哪些索引:

  EXPLAIN SELECT *
FROM
    customers
WHERE
    contactFirstName LIKE 'A%'
        OR contactLastName LIKE 'A%';

就像结果中展示的一样,查询优化器使用了idx_c_fn and idx_c_ln

四:如果有更好的索引使用,可以使用USE INDEX

比如说认为 idx_c_flidx_c_lf 比较好,我们来看下使用情况

EXPLAIN SELECT *
FROM
    customers
USE INDEX (idx_name_fl, idx_name_lf)
WHERE
    contactFirstName LIKE 'A%'
        OR contactLastName LIKE 'A%';

一起看下结果

这时候我们便看到查询优化器使用了我们推荐的索引了。

参考原文
MySQL USE INDEX Hint

推荐 0
本文由 DataFrog 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册