我需要檢查數據庫中是否存在一行;然而,我正在試圖找到能夠提供最佳性能的方法。最好用一個例子來總結。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