同一个sql,参数不同执行计划结果不同

【 TiDB 使用环境】生产环境
【 TiDB 版本】V6.5.10
【遇到的问题:】
1.同一个sql,参数不同执行计划结果不同,一些命中全部索引,一些命中部分索引
2.在这个sql的QPS量很大的时候,会出现都不命中索引的情况
carout 这个表数据上亿
这个命中部分索引的情况


这个是全命中索引的情况


第一个sql 用 hint 能走到索引吗?

正常吧,不同成本,路径就不一样的

根算子hashagg。一眼tiflash,算的飞快。
弄不好可以优化到0.4s出结果。强烈建议尝试一下。

大佬,先不说tiflash的事。没有 tiflash的时候有时候贼快,有时候好慢是啥情况。

你确定执行计划应该怎么走没问题,用CREATE GLOBAL BINDING FOR方式固定下执行计划

1 个赞

用tiflash做scan就特别慢。

tiflash适合带group by的sql。就好比你现在这个。只要有group by带一堆join也不会很慢。

但是如果select 带一堆join不带group by那tiflash就巨慢。

你现在这个感觉还是统计信息什么的带来的执行计划变了。如果一定要用tikv来做这个sql,还是要尝试绑定一下执行计划。

加hint ,用慢的sql参数带入,看看快不快就知道了。有可能是数据倾斜导致的不同执行计划。

你这问题相当于我举个极限的例子,我用个10亿用户的表,其中男用户999999999,女用户1,性别字段上有个索引,我查询的时候,性别传男和传女,会都走索引吗?sql执行时间能一样吗。。。。