【TiDB 4.0 PCTA 学习笔记】- 2.5.5 SQL Tuning Guide(TiDB 的 SQL 性能优化指南)@1班+wonderwater

课程名称:课程版本(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

节点数小时,使用动态规划:

  1. 6(110)表示节点1和2的join
  2. f[6]表示join group{1,2}的最佳花费
  3. 那么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

学习过程中遇到的问题或延伸思考:

学习过程中参考的其他资料