我需要检查数据库中是否存在一行;然而,我正在试图找到能够提供最佳性能的方法。最好用一个例子来总结。SQL在子集上选择
假设我有如下表:
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
这样,它只会对更窄的数据集合进行表扫描。
我知道上面的查询将不能工作,但有一个查询,会吗?
哦,我无法创建临时表,因为用户将只具有读取权限。
啊,非常感谢。 出于好奇,用于将我的部分问题转化为代码形式的标签是什么? 非常感谢 – Adam 2010-05-17 04:10:15
@Adam:只要把4个空格你的代码。或突出显示所有代码,然后按101010图标(下一个双引号图标(地球图标旁边)) – Hao 2010-05-17 04:16:33
非常感谢所有快速回复 – Adam 2010-05-17 04:17:53