扫码阅读
手机扫码阅读

TiDB | 如何用索引将性能提升666倍?

507 2023-09-07

TiDB 神州数码云基地的POC测试与性能提升案例分享

作者:何傲 - 高级后端开发工程师

本次分享来自一个TiDB爱好者在神码钛合金战队的POC测试体验。测试数据包括约900张表,最大单表超过6000万行。在TiDB上运行后,发现一条SQL频繁出现在慢查询中,经过索引调整,性能提升了666倍。本文将深入分析问题诊断和索引优化的过程。

问题现象

通过Dashboard观察到的慢查询涉及一条SQL,执行时间达到了1.2秒,主要时间耗费在Coprocessor扫描数据上。执行计划显示,问题可能出在大量回表操作上。

深入分析

查询表的总行数发现,回表数量过多,暗示索引效果不佳。进一步分析后发现,作为索引的group_id字段区分度差且数据分布不均。因此,要解决问题,不能单纯依赖全表扫描。

失败后的问题溯源

初次索引导致的读热点问题明显,手动切分region后依然存在高CPU使用率和流量问题,需要新的解决方案。

解决思路

  1. 确定任务目标:需要利用索引减少全表扫描。
  2. 组成复合索引:选择合适的字段组合成复合索引,但要注意字段顺序和区分度。
  3. 优化再尝试:根据区分度和字段重要性,构建更优的复合索引。
  4. 原理解析:复合索引中区分度高的字段应放前面,以最大化效率。

最终,在不使用Coprocessor Cache的情况下,通过调整索引,将执行时间降低至1.8ms,性能提升显著。

索引知识点总结

  • 索引字段应具有高区分度。
  • 索引查询效率并非总比全表扫描高。
  • 利用索引特点减少回表次数。
  • 了解复合索引的最左匹配原则。
  • 复合索引中高区分度字段应优先。

索引的适当使用需要具体情况具体分析,且DBA的作用不可小觑。希望本次案例能为大家带来实际帮助。

想要了解更多,点击 查看原文