我有一个表Business
(包含10,000多行),位列ISBILLINGBUSINESS
。
在存储过程中,我必须检查记录是否ISBILLINGBUSINESS
为True。
我可以比较两种方法。
(1)
IF EXISTS (SELECT id FROM BUSINESS WHERE ID = 5404 AND ISBILLINGBUSINESS = 1)
select 'Billing Business'
(2)
IF((SELECT ISBILLINGBUSINESS FROM BUSINESS WHERE ID = 5404) = 1)
select 'Billing Business'
我想知道以下两种方法的性能明显差异。 哪一个更好?有人可以帮忙吗?
答案 0 :(得分:0)
可能是有效的代码
declare @Boolbillbuss bit
select @Boolbillbuss = ISBILLINGBUSINESS FROM BUSINESS WHERE ID = 5404
IF( @Boolbillbuss=1)
select 'Billing Business'
答案 1 :(得分:0)
对于性能问题,10K行通常太小。在任何情况下,在性能方面,拥有适当的索引很重要,IF
表达式的形式在这里并不重要。
如果ID
上有唯一索引,则两种变体都很好并且几乎相同。
如果ID
是唯一的并且是聚集索引的主键,那么您拥有所需的一切。
如果聚簇索引不同,或者此表上没有聚簇索引,请创建覆盖索引,其中包括查询中引用的所有列:
CREATE UNIQUE NONCLUSTERED INDEX [IX_ID] ON [Business]
(
[ID] ASC
)
INCLUDE ([ISBILLINGBUSINESS])