LIKE演算でのみ使用されるvarchar列にインデックスを付けるのは良い考えですか?クエリ分析から読み取れるものから、次のクエリから取得します。
SELECT * FROM ClientUsers WHERE Email LIKE '%niels@bosmainter%'
「推定サブツリーコスト」はインデックスなしで0.38、インデックスありで0.14になります。クエリがインデックスで最適化されている場合、これは分析に使用するのに適したメトリックですか?
「abcdefg」というデータが与えられた
WHERE Column1 LIKE '%cde%' --can't use an index
WHERE Column1 LIKE 'abc%' --can use an index
WHERE Column1 Like '%defg' --can't use an index, but see note below
注: '%defg'を必要とする重要なクエリがある場合は、永続的な計算列を使用して、列をREVERSE()してからインデックスを付けることができます。次に、次のクエリを実行できます。
WHERE Column1Reverse Like REVERSE('defg')+'%' --can use the persistent computed column's index
私の経験では、最初の%記号はインデックスを役に立たなくしますが、最後の1つはインデックスを使用します。
質問のメトリックスの部分に答えるには:実行されているインデックス/テーブルスキャン/シークのタイプは、インデックスが(適切に)使用されているかどうかを知るための良い指標です。通常、クエリプランアナライザーの一番上に表示されます。
次のスキャン/シークタイプは、最悪から(上)から最高にソートされています)(下):
経験則として、通常は可能な限りスキャンよりもシークを試みるようにします。いつものように、テーブルのサイズ、クエリされた列などに応じて例外があります。「スキャンシークインデックス」に対して StackOverflowで検索 を実行することをお勧めします。 。