避免在 SQL Server 中盲目地追求一句处理

网络整理 - 07-27

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