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

最新文章

  1. hibernate- Hibernate中多对多的annotation的写法(中间表可以有多个字段)
  2. arcgis
  3. Bootstrap3.0学习教程十七:JavaScript插件模态框
  4. linux和window下mkdir函数问题(转-锦曦月)
  5. iOS 10.0 更新点(开发者视角)
  6. 每天一个linux命令(36):top命令
  7. ajax练习习题二三级联动
  8. I-frame、B-frame、P-frame及DTS、PTS的关系(转)
  9. php之面向对象(1)
  10. Flask挺好
  11. AWS EMR上搭建HBase环境
  12. 敦泰FT6X06单层自容调屏
  13. 查看当前Jquery版本
  14. Mysql --初识mysql语句
  15. Non-UTF-8 code starting with '\xbb' in file
  16. $(document).ready和window.onload 简单分析区别
  17. Java基础之多线程没那么复杂!
  18. JavaScript权威指南--事件处理
  19. MySQL 事物机制
  20. vb 获取打印机名称

热门文章

  1. Flume入门样例
  2. node-webkit 开发环境搭建
  3. linux-c 调试 gdb
  4. C# Soap调WebService
  5. atitit.复合变量,也就是类似$$a的变量的原理与实现 java c#.net php js
  6. android学习十三(android的通知使用)
  7. 怎样优雅的研究 RGSS3 番外(一) ruby 实现的后缀自己主动机
  8. MVC | 微软自带的Ajax请求
  9. javascript执行环境以及作用域链的理解
  10. Eclipse maven 项目红叉 编译不报错问题处理