【发布时间】:2010-05-17 04:00:35
【问题描述】:
我需要检查数据库中是否存在一行;但是,我正在尝试找到提供最佳性能的方法。最好用一个例子来概括。
假设我有下表:
dbo.Person(
FirstName varchar(50),
LastName varchar(50),
Company varchar(50)
)
假设此表有数百万行,但只有 Company 列有索引。
我想知道FirstName、LastName 和Company 的特定组合是否存在。我知道我可以做到:
IF EXISTS(select 1 from dbo.Person where FirstName = @FirstName and LastName = @LastName and Company = @Company)
Begin
....
End
但是,除非我弄错了,否则会进行全表扫描。
我真正希望它做的是一个使用索引的查询。通过上表,我知道下面的查询会有很好的性能,因为它使用了索引:
Select * from dbo.Person where Company = @Company
有没有办法只在该数据子集上进行搜索?例如像这样:
select * from (
Select * from dbo.Person where Company = @Company
)
where FirstName = @FirstName and LastName = @LastName
这样,它只会对更窄的数据集合进行表扫描。
我知道上面的查询行不通,但是有没有可以行的查询?
哦,我无法创建临时表,因为用户只有读取权限。
【问题讨论】: