避免在 SQL Server 中盲目地追求一句处理
SQL Server的处理中,不少人有追求一句出结果的习惯,但必须注意的是,不恰当的合并处理语句,往往会产生不佳的性能,本文针对使用 UNION ALL 代替 IF 语句的合并处理做一个测试,说明这种方法会带来的负面影响
dbo.A
ELSE dbo.B
B、一句的处理方法
SELECT 0
UNION ALL
SELECT 1
建立测试环境(注,此测试环境是为几个主题服务的,因此结构看起来有些怪异)
USE tempdb
GO
SET
1) WITH NOWAIT
-- Table A
CREATE
[TranNumber])
)
CREATE INDEX [indexONinvno] ON [dbo].A([INVNO])
CREATE INDEX [indexOnitem] ON [dbo].A ([ITEM])
CREATE INDEX [indexONiteminnvo] ON [dbo].A([INVNO], [ITEM])
GO
-- Table B
CREATE
[ItemNumber], [CompanyCode])
)
CREATE INDEX [ItemNumber] ON [dbo].B([ItemNumber])
CREATE INDEX [CompanyCode] ON [dbo].B([CompanyCode])
CREATE
1A([INVNO], [ITEM])
SELECT 815B([ItemNumber], [CompanyCode], [OwnerCompanyCode])
SELECT 1544
@loop 0
@loop 10@dt
@a
@a
ms
@dt
[ITEM]
@a [ItemNumber] @t ms
WHERE id = @id
END
SELECT * FROM @t
UNION ALL
SELECT ab
为了证明这个问题,我们再做下面的测试
BLOCK 的测试—为表A加锁 (查询窗口A)
BEGIN 4
1
[TranNumber]
ELSE [ItemNumber]
A
[ITEM] < 'A'
UNION 1