• 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

  • 相关阅读:
    箭头函数
    对象的方法
    promise
    分布式文件存储FastDFS 邓维
    mysql字段长度设计 邓维
    计算机速成课 第二十一集 压缩
    计算机速成课 第二十四集 冷战和消费主义
    计算机速成课 第二十二集 命令行界面
    计算机速成课 第二十集 文件系统
    计算机速成课 第二十三集 屏幕&2D 图形显示
  • 原文地址:https://www.cnblogs.com/olinux/p/5146757.html
Copyright © 2020-2023  润新知