TIDB升级(5.1.4->7.5.3)SQL执行计划变化,不能用到合适索引,性能变差

TIDB升级(5.1.4->7.5.3)SQL执行计划变化,不能用到合适索引,性能变差
【 TiDB 使用环境】生产环境
【 TiDB 版本】7.5.3
【复现路径】
TIDB 升级7.5.3后原来的SQL执行计划变化,不能很好的用到索引,性能下降 (0.97s → 60s)。
【遇到的问题:问题现象及影响】

  1. TIDB升级后原来的SQL执行计划变化,不能很好的用到索引,性能下降。
  2. SQL以前并没有设置binding
  3. SQL如下:
    SELECT biz_id as topicId,title as tTitle,club_refine as tRefine, hot_score ,club_is_poll as tIsPoll,club_bbs_type as tbbs,club_bbs_id as tbbsId,club_videoimgs,club_topicimgs,publish_time,pv,topic_reply_count_all ,pc_url,topic_reply_count,hot_score_all_bbs,club_bbs_name,author_id from club_bbs_topic WHERE publish_time>DATE_SUB(now(), interval 7 DAY) and club_delete_flag=0 AND is_publish=1 order by hot_score_all_bbs desc limit 100
    旧集群SQL的执行计划:

新集群的执行计划:

表结构情况:

【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面
【附件:截图/日志/监控】

看下这个表的统计信息是否正常吧?

show stats_meta where table_name='club_bbs_topic';
show stats_healthy where table_name='club_bbs_topic';
1 个赞

升级之后,先analyze 一把,确保统计信息准确。
当然你想后续分析原因可以 analyze 之前导出一份 plan replayer 供后续分析。
另外如果只能看截图的话,你提供的信息太少,可以补充下表机构,可以explain analyze format=“verbose” 上传下更具体的信息

会不会是升级前后统计信息发生了变化导致的?手工analyze一下看看。