質問

データベースに行が存在するかどうかを確認する必要があります。しかし、私は最高のパフォーマンスを提供するこれを行う方法を見つけようとしています。これは例を挙げて最もよく要約されています。

次の表があるとしましょう: ジェネラコディセタグプレ

このテーブルには数百万の行があると想定しますが、インデックスを持つのは列Companyのみです。

FirstNameLastNameCompanyの特定の組み合わせが存在するかどうかを知りたいです。私はこれができることを知っています: ジェネラコディセタグプレ

ただし、私が間違っていない限り、全表スキャンが実行されます。

私が本当にやりたいのは、インデックスを利用するクエリです。上記の表を見ると、次のクエリはインデックスを使用しているため、優れたパフォーマンスを発揮することがわかります。 ジェネラコディセタグプレ

そのデータのサブセットのみを検索する方法はありますか?例えばこのようなもの: ジェネラコディセタグプレ

そうすれば、はるかに狭いデータのコレクションに対してのみテーブルスキャンを実行することになります。

上記のクエリが機能しないことはわかっていますが、機能するクエリはありますか?

ああ、ユーザーには読み取りアクセスしかできないため、一時テーブルを作成できません。

役に立ちましたか?

解決

IF EXISTS( ...)が最速の形式です。オプティマイザーは、インデックスが高速になると計算した場合、フィルター条件を満たすために使用可能なインデックスを使用します。IF EXISTSは、行が見つかるとすぐに終了します。

統計が最新であることを確認してください...

他のヒント

FWIW、これは有効なSQLです: ジェネラコディセタグプレ

そして、エイリアスだけがクエリと異なります。ミッチが彼の投稿で述べているように、IF EXISTSはより速くなります。

クエリアナライザを使用して、オプティマイザが何を行うかを決定できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top