zoukankan      html  css  js  c++  java
  • MySQL中的索引提示Index Hint

    MySQL数据库支持索引提示(INDEX HINT)显式的高速优化器使用了哪个索引。以下是可能需要用到INDEX HINT的情况

    a)MySQL数据库的优化器错误的选择了某个索引,导致SQL运行很慢。这个在最新版的数据库版本中非常少见。优化器在绝大部分情况下工作的非常有效和正确。

    b)某些SQL语句可以选择的索引非常多,这时优化器选择执行计划时间的开销可能会大于SQL语句本身例如优化器分析Range查询本身就是比较耗时的操作。这时DBA或开发人员分析最优的索引选择,通过index hint来强制使优化器不进行各个路径的成本分析直接选择指定的索引来完成查询

    MySQL数据库的Index Hint语法

    看个表结构

    CREATE TABLE t(
    
    a INT,
    
    b INT,
    
    KEY(a),
    
    KEY(b)
    
    )ENGINE=INNODB;
    
    INSERT INTO t SELECT 1,1;
    
    INSERT INTO t SELECT 1,2;
    
    INSERT INTO t SELECT 2,3;
    
    INSERT INTO t SELECT 2,4;
    
    INSERT INTO t SELECT 1,2;
    
     
    
     

    查看执行计划

    如图SQL语句可以使用a,b索引,实际使用的索引为b,a完成整个查询,列Extra提示Using intersect(b,a)表示根据两个索引得到的结果进行求交的数学运算,最后得到结果

    如果我们使用USE INDEX 的索引来使用a这个索引呢

    EXPLAIN SELECT * FROM t USE INDEX(a) WHERE a=1 AND b=2;

    可以发现,优化器使用了a的索引,但use index只是告诉优化器可以选择该索引,实际上优化器还是会根据自己的判断进行选择,最可靠的做法是FORCE INDEX

  • 相关阅读:
    linux 命令 # tar zcvf Work.tar.gz Work
    ODBC
    vmware 与机器共享
    关机!!!
    reador哦
    asp.net的三层架构图
    十大著名黑客——阿德里安拉莫
    十大著名黑客——查德斯德尔曼
    十大著名黑客——埃里克雷蒙德
    十大著名黑客——George Hotz
  • 原文地址:https://www.cnblogs.com/olinux/p/5146757.html
Copyright © 2011-2022 走看看