tidb in类型sql改写成union(union all)反而更慢

tidb4.0.13版本

问题描述 有个业务sql是select * from uk in (xxx,xx,xx),in 是个唯一键,里面的值很多,大概一万多个,所以跑起来的性能有点差,大概是1.几秒
执行计划如下
%E5%9B%BE%E7%89%87

后来改写成union后性能反而更差了,大概需要45s才能出结果,改成union all,大概20秒出结果。
union的执行计划

想请教一下,union的性能为什么反而比in差呢?

in 是个唯一键 (这个是关键条件)

in 逻辑优化可以变成 pointBatchGet ,直接走 KV 接口了
union 则需要 DistSQL,需要在tidb 节点实现聚合 (这里会分为范围扫描,全表扫描等)
看执行计划优化就行了

哪种更符合你的场景,你就用哪种…

你的union不会是union了上万个select语句吧,感觉这样更慢

union的执行计划贴全些,SQL、表结构也贴下