mysql查询优化器提示(hint)
2019-05-18 本文已影响12人
数据蛙datafrog
在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表结构
一:使用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_fl和 idx_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