同样的sql,不同的取值使用索引差异

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:3.0.4
  • 【问题描述】:3 tidb 3 tikv部在一起

table1有:联合索引(user_id, created_time),非联合索引 created_time

select * from table1 where user_id in (111) order by created_time;

  • 使用created_time

select * from table1 where user_id = 111 order by created_time;

  • 使用(user_id, created_time)

而且并不一定in就会使用created_time,而是和user_id的取值有关系,有的使用联合索引,有的不使用;

近期部署pump后rolling_update后才出现的问题,上述的sql只是索引有问题的其中一种句式;感觉好像是某种配置被调整了一样,(但是部署过程是按照文档,只改动了和pump有关的参数)索引信息不准确,从而导致内存和cpu高起,影响线上服务。

目前只是知道索引有问题,但是不知道定位的方向是什么?是否需要analyze下,另外analyze是否会对线上服务有影响?

索引信息不准的话, 可以通过 show stats_healthy 来查看 Healthy 字段,一般小于等于 60 的表需要做 analyze。analyze 建议在业务低峰时期操作。

health=91

低峰时间做了下analyze table,health=100,然后索引相关的各种sql的explain都正常了,集群的状态也有比较明显好转,io和cpu的锯齿减少比较多。

:+1::+1::+1: