18|读懂MySQL中的执行计划(上)
俊达
你好,我是俊达。
上一讲我介绍了数据库中最主要的几种访问路径,不同的访问路径,在执行性能上可能会存在巨大的差别。但是我们怎么知道某一个具体的 SQL 语句在执行时,采用了什么样的访问路径呢?这就涉及到 SQL 的执行计划了。执行计划描述了 SQL 语句的访问路径,通过执行计划,我们可以知道:
表上是否有可用的索引,SQL 执行时是否使用了索引,使用了哪些索引?
表连接的顺序是怎样的?
使用了哪种表连接算法,是用了 Nest Loop 还是 Hash Join?
查询是否用到了临时表,是否进行了文件排序?
在 MySQL 中,我们使用 Explain 命令查看语句的执行计划。这一讲中我会使用四十多个演示 SQL,来解释 EXPLAIN 输出信息的具体含义。至于为什么一个 SQL 使用了这个执行计划,而不是别的执行计划,我会在接下来的几讲中慢慢展开。
为了便于演示各种不同的执行计划,我使用了下面这些测试表和测试数据,你也可以在自己的环境中进行测试。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. 执行计划描述了SQL语句的访问路径,包括表上是否有可用的索引、表连接的顺序、使用的表连接算法等。 2. 使用EXPLAIN命令可以查看SQL语句的执行计划,可以指定输出格式为traditional、json或tree。 3. 了解如何解读EXPLAIN输出信息,可以帮助优化SQL语句的执行性能,选择合适的访问路径和连接算法。 4. TYPE列显示查询单元的访问路径,可以根据TYPE列来判断查询单元是否使用了索引。 5. const表示查询最多返回1行记录,对主键或唯一索引的所有字段都使用常量等值匹配时,type为const。 6. eq_ref使用主键或唯一索引等值匹配时,对于组合主键、组合唯一索引,索引中的每一个字段都需要以等值匹配时,type才为eq_ref。 7. ref表示普通索引字段的等值匹配,或主键和唯一索引前缀字段上的等值匹配。 8. range使用索引字段上的范围条件查询数据,包括 `<, <=, >, >=, BETWEEN` 等条件。 9. index_merge会使用多个索引来查询数据,并将通过多个索引获取到的数据取并集或交集,得到最终的结果. 10. index_subquery是执行特定类型的子查询的一种方式,如果子查询中的表有合适的索引可以用来检索,则可以使用index_subquery执行路径.
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《MySQL 运维实战课》,新⼈⾸单¥59
《MySQL 运维实战课》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论