课程名称:2.5.5 SQL Tuning Guide(TiDB 的 SQL 性能优化指南)
学习时长:50min
课程收获:
通过 Explain 语句理解 TiDB 的执行计划,TiDB 在优化器和执行器的大致架构,会影响执行性能的一些变量以及使用场景,非侵入性的控制 SQL 的执行计划。
课程内容:
1.理解 TiDB 的执行计划
TiDB 优化器会根据当前数据表的最新的统计信息来选择最优的执行计划,执行计划由一系列的算子构成。
TiDB 中可以使用EXPLAIN 命令来查看执行计划,EXPLAIN 语句的返回结果提供了TiDB 执行SQL 查询的详细信息:
• EXPLAIN 可以和SELECT,DELETE 等语句一起使用;
• 执行EXPLAIN,TiDB 会返回被EXPLAIN 的SQL 语句经过优化器后的最终物理执行计划。也就是说,EXPLAIN展示了TiDB 执行该SQL 语句的完整信息,比如以什么样的顺序,什么方式JOIN 两个表,表达式树长什么样等等。
• 关于EXPLAIN 每列的简述,可以参见EXPLAIN 输出格式。
通过观察EXPLAIN 的结果,你可以知道如何给数据表添加索引使得执行计划使用索引从而加速SQL 语句的执行速度;你也可以使用EXPLAIN 来检查优化器是否选择了最优的顺序来JOIN 数据表。
2.TiDB SQL优化流程
-
逻辑优化
优化规则:
关于子查询的转换
非关联子查询的优化
聚合下推规则
Join reorder
贪心join算法
-
物理优化
-
索引选择
如果执行计划选错了索引:
1)analyze the table
2) 如果选择错了引擎:tidb_opt_seek_fact;如果不是:use index hint or just SPM

Hash join
Index join

Merge join


Hash 聚合
流式聚合

Index Lookup Reader 回表读

3.控制执行计划:
1)use hint
2)SQL plant managemnet