两个查询SQL语句,单独查询很快,但是两个查询union all超级慢

【 TiDB 使用环境】生产环境
【 TiDB 版本】6.5.1
【复现路径】

SQL语句1:
SELECT
dim_adid,
dim_creativeid,
dim_materialid,
‘999’ AS dim_djid,
‘999’ AS dim_videoid,
dim_advsiteid,
dim_timeslice
FROM
tab1
WHERE
timeslice >= 20240301
AND timeslice <= 20240531;
执行计划如下:

SQL语句2:
SELECT
999 AS dim_adid,
999 AS dim_creativeid,
999 AS dim_materialid,
dim_djid,
dim_videoid,
dim_advsiteid,
dim_timeslice
FROM
tab2
WHERE
timeslice >= 20240301
AND timeslice <= 20240531;
执行计划如下:

上面两个SQL语句单独执行很快,0.1s左右,但是上面两个SQL语句通过union all查询,特别慢50s多,

union all的执行计划如下:

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

1 个赞

先给tab2加上索引看看,避免table full scan

你这个看起来全表扫 很快么?你应该是客户端给你加了一层 limit 100;

确实是客户端加了 limit限制,没有limit限制也不快,这个字段timeslice是bigint类型,这种情况下有优化的方案吗

额 是不是单纯没索引?

有一个复合主键
PRIMARY KEY (dim_timeslice,dim_blid,dim_plid,dim_apptype,dim_appid,dim_dwsiteid,dim_advsiteid,dim_djid,dim_videoid)

看起来 timeslice 都不在里面?

在里面,是这个dim_timeslice字段

你条件不是这个么。。。

sorry,贴的有点问题

tab2的timeslice 加上索引有改善没有

tab2上和tab1也一样,有一个复合主键索引,只是没有用到索引

1 个赞

:flushed:加了limit但是执行计划里没显示?

explain看下执行计划哪里慢了

给我的学习经验是要看懂执行计划。

tb2没用到索引,是不是索引建得有问题

缺索引吧

explain analyze 下看看真正耗时在哪里,

数据返回占全表的比例是多少

tab2的复合主键索引是怎样的?贴出来看看