为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
- 【TiDB 版本】:V3.0.14
- 【问题描述】:sql执行计划默认使用全表扫描,而没有使用更优的索引,导致请求时间变大
如下截图: aftersale表健康度为98%,Modify_count为227520,Row_count为15384886
sql: SELECT COUNT(*) AS
total
FROMaftersale
WHEREgoods_id
=‘43222179’ ANDtype
=‘0’ ANDmall_id
=140990 AND (create_at
>= ‘2020-05-11 00:00:00’ andcreate_at
<= ‘2020-08-08 23:59:59’) ANDis_bot
=0 ANDstatus
> 4 LIMIT 1; 执行耗时3秒+
而sql加上索引hint语法后: SELECT COUNT(*) AS
total
FROMaftersale
force index(tidb2rds_mid_create) WHEREgoods_id
=‘43222179’ ANDtype
=‘0’ ANDmall_id
=140990 AND (create_at
>= ‘2020-05-11 00:00:00’ andcreate_at
<= ‘2020-08-08 23:59:59’) ANDis_bot
=0 ANDstatus
> 4 LIMIT 1; 执行耗时20毫秒左右
这种问题近期出现过几次了 , 每次出现时,整个tidb集群由于该表的全表扫描导致性能抖动很严重 。
帮分析下原因 ,以及解决办法,感谢 ~