我注意到下面的时间是32秒在SQL Server(2008 R2)查询减慢条件下IF
IF ((SELECT COUNT(*) FROM view1) != 0)
OR ((SELECT COUNT(*) FROM view2) != 0)
OR ((SELECT COUNT(*) FROM view3) != 0)
OR ((SELECT COUNT(*) FROM view4) != 0)
OR ((SELECT COUNT(*) FROM view5) != 0)
OR ((SELECT COUNT(*) FROM view6) != 0)
PRINT 'HI'
运行然而,只有以下了4秒
SELECT
(SELECT COUNT(*) FROM view1)
, (SELECT COUNT(*) FROM view2)
, (SELECT COUNT(*) FROM view3)
, (SELECT COUNT(*) FROM view4)
, (SELECT COUNT(*) FROM view5)
, (SELECT COUNT(*) FROM viwe6)
我有设法通过执行SELECT COUNT(1)... + SELECT ...!= 0来优化条件,这样它需要4秒,但是查看执行计划还没有产生任何特别显着的结果。没有太多的机会用google搜索词或者。
有人可以分享一下SQL Server优化器可能在背后做什么吗?
编辑:如果EXISTS尝试了38秒。
IF EXISTS ((SELECT 1 FROM view1)
UNION (SELECT 1 FROM view2)
UNION (SELECT 1 FROM view3)
UNION (SELECT 1 FROM view4)
UNION (SELECT 1 FROM view5)
UNION (SELECT 1 FROM view6))
PRINT 'HI'
EDIT2:目前的第5种方法。
IF (SELECT COUNT(1) FROM view1)
+ (SELECT COUNT(1) FROM view2)
+ (SELECT COUNT(1) FROM view3)
+ (SELECT COUNT(1) FROM view4)
+ (SELECT COUNT(1) FROM view5)
+ (SELECT COUNT(1) FROM viwe6) != 0
PRINT 'HI'
EDIT3:比较20page大小的查询计划之后 - 它出现的加速主要是由于基本观点都做了局部聚集的加入,而不是做连接,然后汇总之前。
你做EXISTS获得更好的性能(SELECT 1 FROM厂景),因为这会停止寻找它发现一排后,而不是统计所有行。 – Brandon 2014-11-25 01:31:33
我确实尝试了EXISTS。但它也花了大约38秒。我会把我在编辑中尝试的东西放进去。 – 2014-11-25 01:43:45
一个快速的想法把计数结果放到变量中,然后使用IF条件 – 2014-11-25 06:55:51