呆鸟的Python数据分析数据蛙数据分析每周作业数据结构和算法分析

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表结构

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_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

上一篇下一篇

猜你喜欢

热点阅读