提升666倍性能:TiDB索引优化实战揭秘
版权申诉
36 浏览量
更新于2024-08-07
收藏 567KB DOC 举报
在这个关于在TiDB中正确使用索引的小案例中,作者分享了一个实际项目经验,涉及到一个物流系统的性能优化。系统原先是基于MySQL开发的,后来迁移至TiDB进行测试,业务数据量较大,包含10个库和约900张表,最大的单表有6千万多行。迁移过程顺利,但在TiDB环境中,发现一条SQL语句频繁出现在慢查询列表中,即使看起来是个简单的单表查询,但执行时间却高达1.2秒,其中大部分时间(约666倍)耗费在Coprocessor的数据扫描上。
SQL查询涉及31个字段,其查询条件包括group_id、cur_thread、pre_exectime等字段。原始SQL和执行计划显示,没有有效的索引来加速搜索,导致TiDB不得不对整个表进行全表扫描,效率低下。
在TiDB中,索引对于大规模数据的查询性能至关重要。正确的索引设计可以显著减少数据扫描的范围,从而提升查询速度。对于这种情况,如果在job_cm_data表中的某些字段经常作为搜索条件出现,应该考虑创建这些字段的索引。例如,可以为`group_id`、`cur_thread`等字段建立覆盖索引,使得查询只需基于索引就能获取所需结果,避免了全表扫描。
创建索引可以遵循以下步骤:
1. 分析查询模式:确定哪些字段经常被用于WHERE子句的条件。
2. 选择合适的索引类型:B-Tree索引适合大多数情况,但如果存在范围查询或部分匹配,InnoDB的全文索引或哈希索引可能更合适。
3. 考虑覆盖索引:如果索引包含了查询所需的全部数据,查询可以直接在索引上完成,无需回表,进一步提高性能。
4. 避免过度索引:创建过多索引会增加存储开销和维护成本,应仅针对常见查询路径创建必要的索引。
在这个案例中,如果在job_cm_data表的特定字段上添加了合适的索引,预计可以大幅降低查询时间,提高系统的整体响应速度。通过调整索引策略,不仅解决了当前的性能瓶颈,还能为未来可能的增长和更多的查询场景做好准备。此外,定期监控和优化索引也是保持系统性能的关键,因为数据结构和查询需求可能会随着时间而变化。
2022-07-13 上传
2022-02-26 上传
2022-08-03 上传
2020-08-15 上传
2023-05-25 上传
2019-06-21 上传
2020-03-06 上传
2021-03-03 上传
书博教育
- 粉丝: 1
- 资源: 2837
最新资源
- Canteen-Automation-App:一个食堂自动化应用程序,用于使手动食堂管理系统自动化
- zxing-cpp:ZXing的C ++端口
- Windows server2008R2 补丁kb4474419-v3-x64
- CognitiveRocket:此存储库主要用于Bot,Power Platform,Dynamics 365,Cognitive Services和ML.NET的研发。
- pouchdb-all-dbs:PouchDB的allDbs()插件
- FromJson
- Dahouet-Repository
- Cyclist
- endlessArrayPromise
- GEO82_5_HE
- workberch-tolopogy:由 Taverna Workbench 上的工作流文件创建的动态 Apache Storm 拓扑
- Surface-Crack-Detection-CNN:使用CNN对Kaggle上可用的图像数据进行表面裂纹检测。 该存储库将在Streamlit中同时具有“模型实现”和“ Web应用程序”,用于检测裂缝
- AppiumTest
- COMP397-W2021-Lesson8a
- 使用TensorFlow.js进行AI聊天机器人:训练Trivia Expert AI
- bdmap