尽管扫描行数相对较少仍旧出现慢查询

【遇到的问题:问题现象及影响】
我在优化系统中的一个慢查询,在添加索引后,扫描的行数大幅减少,利用该索引的子查询的延迟也有所改善。一般来说,当我运行 EXPLAIN 查询时,各个阶段扫描的行数显示出显著的改进。然而,整个查询仍然非常慢。想请问大佬们这可能是什么原因呢? 以下是添加索引前后的执行计划附件
Explain query.xlsx (14.0 KB)

发一下 explain analyze 真实的执行计划吧

从执行计划来看,感觉这 SQL 写的烂,明明就一个查询一个表,查来查去的
你把完整的 SQL 和 explain analyze 结果发出来

2 个赞

这可能是由以下几个原因导致的:

  1. 其他查询部分的性能瓶颈

    • 即使子查询的性能得到了提升,如果整个查询中还有其他部分(如连接、排序、聚合等)存在性能瓶颈,那么整个查询的速度仍然可能很慢。
  2. 索引选择

    • 确保 TiDB 正确地选择了您添加的索引。有时候,即使索引存在,优化器也可能没有选择使用它,或者选择了一个不是最优的索引。
  3. 数据分布不均

    • 如果数据分布不均匀,导致索引的某些部分非常稀疏,那么索引的效率可能会降低。
  4. 锁和事务

    • 在高并发的系统中,锁和事务可能会成为性能瓶颈。即使查询的某些部分变快了,但如果系统中存在大量的写操作,可能会导致锁争用,从而影响查询性能。
  5. 网络延迟

    • 如果查询涉及到分布式事务或跨节点的查询,网络延迟可能会影响整体性能。
  6. 资源限制

    • 系统资源(如 CPU、内存、磁盘 I/O)的限制也可能导致查询变慢。