分区表在数据倾斜场景下的索引优化策略探讨

问题背景:
数据规模:单表数据量 2亿+

分区策略:基于租户ID的HASH分区

系统背景:从MySQL迁移后保留了原有索引结构,索引都包含租户ID字段

现存问题:
数据分布均匀时,查询性能表现正常
在数据倾斜场景下(单一租户数据占比90%+),原有索引区分度显著降低,导致大量回表操作,查询性能急剧下降
复现案例:
SELECT * FROM order WHERE customer_code = ‘1234’ AND deleted = 0 AND create_time > ‘2025-03-01 00:00:00’

以上SQL虽然条件简单,但在大租户数据场景下性能表现不佳。

逐表分析并优化索引方案工作量巨大。希望能获取一些系统性的优化建议或最佳实践经验,以提升查询性能。是否有针对数据倾斜场景的索引优化策略?有无其他架构层面的解决方案?

像这种明细查询表,当某个客户非常大交易非常多,这时候查询某段时间交易明细就会比较慢,一般业务设计上就要考虑这问题,因为你不可能要求数据库返回几十万数据与返回几行数据一样速度吧
一般都会设计分页的,典型的场景你可以打开手机上的银行 app,看下交易明细,都是下滑才能显示下一页,通常还不显示总行数,而且还会限制一次查询所查询的数据范围,比如最多一次查 6 个月,你想查 12 个月,得分 2 次