mysql查询优化器提示(hint)

作者: 数据蛙datafrog | 来源:发表于2019-05-18 19:17 被阅读12次

    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

    相关文章

      网友评论

        本文标题:mysql查询优化器提示(hint)

        本文链接:https://www.haomeiwen.com/subject/aojtzqtx.html