データベースに行が存在するかどうかを確認する必要があります。ただし、最高のパフォーマンスを提供するこれを行う方法を見つけようとしています。これは、例で最もよく要約されています。
次のテーブルがあるとします。
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
そうすれば、はるかに狭いデータ コレクションに対してのみテーブル スキャンを実行することになります。
上記のクエリが機能しないことはわかっていますが、機能するクエリはありますか?
ああ、ユーザーは読み取りアクセスしかできないため、一時テーブルを作成できません。