我需要检查数据库中是否存在一行;但是,我正在尝试找到提供最佳性能的方法。最好用一个例子来概括这一点。
假设我有下表:
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
这样,它只会对更窄的数据集合进行表扫描。
我知道上面的查询不起作用,但是有没有查询可以呢?
哦,我无法创建临时表,因为用户只有读取权限。