课程名称:课程版本(201)+ TiDB Courses for Application Developers: based on version 4.0(TiDB 4.0 应用开发指南)
学习时长:60
课程收获:TiDB 的 SQL 性能优化
课程内容:
理解explain的输出,例子
estRows:估算行
task:root(在tidb执行的),cop[tikv](在tikv执行的),cop[tiflash](在TiFlash执行的)
explain analyze sql
多一列actRows,实际执行的行数
逻辑优化器
- MaxMinElimination
以上是个等价的转换,如果a有索引,那么:
- subquery transformation
以上并不总是有效,当t2是小表。
- aggregate push down
提前聚合t1.a,减小行数
- join reorder
节点数小时,使用动态规划:
- 6(110)表示节点1和2的join
- f[6]表示join group{1,2}的最佳花费
- 那么f[group] = min{join(f[sub], f[group-sub])}
节点数大时,贪心算法:
物理优化
比如,带有排序信息
错误的索引
- 估算信息错误:analyze table
- TiFlash和TIKV选择错误
- 使用hint,spm
执行框架
- hash join,并行查找
- index join,并行
- merge join
- NestedLoopApply:关联子查询,当前效率不高
- hash aggregate
- stream aggregate
- index lookup reader,与index join类似
控制执行计划
- use index
- /+ use_index(t1,t2)/
问题,遇到orm之类不方便写hint,引出SQL plan management
- binding语法
- show global bindings