union all 语句unon子查询的执行计划发生改变

【 TiDB 使用环境】生产环境
【 TiDB 版本】
【复现路径】做过哪些操作出现的问题
【遇到的问题:问题现象及影响】
sql是4个子查询union all到一起的,为什么当union all 3个时候子查询跑很快,当超过三个时候就非常慢了呢
本身是点查,结果超过3个时候变成了全表扫
table full scan


点查询

【资源配置】
【附件:截图/日志/监控】

贴出实际的执行计划看看

贴出来了

sql能发出来吗?

SELECT a.I_REF,
a.CH_BROKER_ID,
a.CH_DEALER_ID,
IFNULL(b.CH_DEALER_NAME, _UTF8MB4’‘) AS CH_DEALER_NAME,
_UTF8MB4’’ AS CH_PAY_CHANNEL,
IFNULL(d.CH_LIC_NO, _UTF8MB4’‘) AS CH_LIC_NO,
a.CH_ID_CARD_UC_ENCRYPT,
t1.I_MEMBER_ID,
a.CH_REAL_NAME_ENCRYPT,
if(a.I_USER_REAL_AMOUNT = 0,
if(a.I_TAX_TYPE = 1, (a.I_AMOUNT - a.I_TAX_AMOUNT), (a.I_AMOUNT - a.I_USER_FEE)),
a.I_USER_REAL_AMOUNT) I_AMOUNT,
a.D_FINISHED_TIME,
ifnull(e.CH_TAX_MODE,’‘) CH_TAX_MODE,
ifnull(e.CH_INCOME_MODE,’') CH_INCOME_MODE
FROM t1 LEFT JOIN a
ON t1.CH_CARD_NO_UC = a.CH_ID_CARD_UC_ENCRYPT LEFT JOIN b
ON a.CH_DEALER_ID = b.CH_DEALER_ID LEFT JOIN c
ON a.I_REF = c.I_REF LEFT JOIN d ON a.I_REF = d.I_BIZ_REF
left join e on a.CH_BROKER_ID=e.CH_BROKER_ID
WHERE a.I_STATUS = 1
AND b.I_CREATED_TYPE = 0
AND b.I_DEALER_ATTRIBUTE = 1
AND c.I_REF IS NULL
AND t1.B_IS_DELETE=0
每段sql都类似这种,只是a这个表查的不同的底表

你的意思是你是4段类似的sql union all,每段单独执行都不慢,但是union all完了很慢吗?

看贴图引擎走的不一样,估计是执行计划不对。这类 tp 类 SQL。直接放 tikv 上跑。不要依赖 cbo 去选择 engine

对,每个sql单独执行很快
我发现个问题
第四个表的底表结构跟前三个不太一样,所以比较慢,但是第四个单独查询也很快的

怎么直接放到tikv上跑啊

看官网 tiflash 使用那块 关键字是 engine

第四个sql单独执行的执行计划也是走的tiflash吗?