读性能慢-慢语句

执行计划

导致执行计划错误的原因,除了统计信息不准确外,还有一些比较常见的问题。

问题定位(需要掌握数据库索引相关基础知识)

我们可以通过 ExplainExplain Analyze 来获取 SQL 具体的执行计划。 Explain 为 TiDB 估算的统计信息,Explain Analyze还包含了 SQL 语句实际执行的相关信息。我们通过SQL 语句,及其执行计划再结合对应的表结构进行具体的问题分析与定位。

解决办法

  • 错误选择索引\重复索引 问题
    由于表中包含多个重复索引 如 Index_A(a,b) 与 Index_B(a,b,c)及为重复索引
    对于等值查询,错误索引可能是由 Count-Min Sketch 引起的。这时可以先检查是不是这种特殊情况,然后进行对应的处理。

  • 使用了不合适的 Join 算子
    Hash Join\ Merge Join\ Index Join 优化器默认会选择一个它认为最优秀的,但有可能选错。原因需要具体分析表结构、执行计划、统计信息以及确认 TiDB 版本。

  • 某些场景下用 Tiflash 不一定优于 TiKV
    TiFlash 时候大数据统计、大表与小表的关联查询。如果查明细数据不一定 Tiflash 更优。通过 TPCC-H 测试也可以发现 TiFlash 并不是所有场景都优于 TiKV

解决方法(以上问题均通过此方法进行解决)

测试使用 Optimizer Hint 改写执行计划

使用 SPM 绑定改写的 SQL 语句

统计信息 Dump,并将相关表结构与 Dump 的统计信息,发送到 Asktug 寻求官方帮助

如必要,可通过优化表结构、SQL 语句或业务实现,进一步解决问题

P.S:关于 SPM 的使用 可以参考 执行计划管理