关于tidb执行计划不优问题请问

下列sql语句,r.plan_exec_time有索引,但不走索引,进行全表扫描,导致sql性能低,这是问什么


开启Tiflash了吗?把这几个表开启列存

为什么his.t_inp_order_exec_record r这个表全表扫描,不先走 r.plan_exec_time列索引,可以过滤很多数据

不开tiflash的条件下,为什么这样,我想搞明白

筛选完还有400w条数据?analyze table 收集下统计信息吧

40%的数据,优化器走全表扫描了

已经进行统计信息收集了
image

收集完执行 explain analyze ,看看实际执行情况

之前好像有个子查询的bug吧印象中

你选择的时间范围段过大。取出的数据太多,优化器如果走索引先查出rowid,然后再回表扫region 可能成本更高。

如果这种查询很频繁,可以考虑加覆盖索引。

如果筛选数据占表数据总量太大就不走索引,你加和hint试试

执行下show stats_healthy where table_name = 'xxxx’看下表的健康度,如果比较低,先analyze table,然后再看下执行计划是否有变化

新表或者新建索引会没有,手动执行一下analyze table

单独执行下子查询看下r表是否可以走索引看选择性挺好的,过滤了差不多一半的数据,如果单独执行子查询不走索引的话,加hint 强制走索引看下

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。