扫码阅读
手机扫码阅读
TiDB | 如何用索引将性能提升666倍?
709 2023-09-07
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章来源:
神州数码云基地
扫码关注公众号
TiDB 神州数码云基地的POC测试与性能提升案例分享
作者:何傲 - 高级后端开发工程师
本次分享来自一个TiDB爱好者在神码钛合金战队的POC测试体验。测试数据包括约900张表,最大单表超过6000万行。在TiDB上运行后,发现一条SQL频繁出现在慢查询中,经过索引调整,性能提升了666倍。本文将深入分析问题诊断和索引优化的过程。
问题现象
通过Dashboard观察到的慢查询涉及一条SQL,执行时间达到了1.2秒,主要时间耗费在Coprocessor扫描数据上。执行计划显示,问题可能出在大量回表操作上。
深入分析
查询表的总行数发现,回表数量过多,暗示索引效果不佳。进一步分析后发现,作为索引的group_id字段区分度差且数据分布不均。因此,要解决问题,不能单纯依赖全表扫描。
失败后的问题溯源
初次索引导致的读热点问题明显,手动切分region后依然存在高CPU使用率和流量问题,需要新的解决方案。
解决思路
- 确定任务目标:需要利用索引减少全表扫描。
- 组成复合索引:选择合适的字段组合成复合索引,但要注意字段顺序和区分度。
- 优化再尝试:根据区分度和字段重要性,构建更优的复合索引。
- 原理解析:复合索引中区分度高的字段应放前面,以最大化效率。
最终,在不使用Coprocessor Cache的情况下,通过调整索引,将执行时间降低至1.8ms,性能提升显著。
索引知识点总结
- 索引字段应具有高区分度。
- 索引查询效率并非总比全表扫描高。
- 利用索引特点减少回表次数。
- 了解复合索引的最左匹配原则。
- 复合索引中高区分度字段应优先。
索引的适当使用需要具体情况具体分析,且DBA的作用不可小觑。希望本次案例能为大家带来实际帮助。
想要了解更多内容?
文章来源:
神州数码云基地
扫码关注公众号
神州数码云基地的其他文章
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设
白皮书上线