EXISTS or INNER JOIN?
现有以下两种查询方式:
方案一:
1 SELECT a.ID, SUM(a.a+a.b+a.c) 'Number' FROM Table1 a 2 INNER JOIN Table2 b ON a.ID=b.ID WHERE a.Time >= '20180508' GROUP BY a.ID
方案二:
SELECT a.ID, SUM(a.a+a.b+a.c) 'Number' FROM Table1 a WHERE a.Time>= '20180508' AND EXISTS(SELECT 1 FROM Table2 WHERE a.ID=b.ID ) GROUP BY a.ID
Table1中数据量2千万条,此表在ID和TIME表下有索引,ID为非聚类,TIME为聚类索引。问题:这两个查询耗时会相差多少,或者分别耗时多少?
答案:可以使用SHOWPLAN_XML先预测一下,以下分别为方案一和方案二的计划开销;


可以看出方案一开销是要略微小于第二种的,在实际的查询过程中,有一个比较少见的现象,使用方案一查询时间就非常稳定1秒左右,但使用第二种查询方法,时间设置为‘20180501’开始查询时间与前者相差无几,但是如果设置为‘20180508’开始,查询时间莫名飙升到了2分钟;究其原因,还在研究中~

浙公网安备 33010602011771号