Sql Serverに関する多くの記事では、クエリを書くときにNOTとLIKE演算子を使用しないでください。索引付けは適用されません。SQL ServerのLIKEとNOT演算子では索引付けは機能しません。これはMYTHです
例えば、
SELECT [CityId]
,[CityName]
,[StateId]
FROM [LIMS].[dbo].[City]
WHERE CityId NOT IN(1, 2)
上記のクエリを実行した結果、インデックス作成がレコードのフィルタリングに使用されていたことが判明しました。 以下は実行計画であり、クラスタ化インデックスシークを明確に示しています。これは私が思って読んでいたものにはっきりと違反しています。
は、私の以前の理解が間違っていましたか?
これは検索語句に依存します。つまり、LIKE演算子の場合、この記事をチェックしてください... http://use-the-index-luke.com/sql/where-clause/searching-for-ranges/like-パフォーマンスチューニング –
@BhrugeshPatel:既にその記事を見ました。私のオフィスでも、NOTとLIKE演算子を避けることを明確に述べた文書を見ました。 LIKEはかなりわかりやすいですが、なぜインデックスが使われないのか、この部分は私のために消化するのが難しいです。 –
さて、LIKEの場合、検索が%で始まる場合、インデックスを使用する必要はありません。それ以外の場合は、検索文字列の先頭が固定文字であるため、インデックスの使用は非常に妥当です。ジョン氏の言ったように、どのデータベースもアルゴリズムに従って利用可能な最良の方法になるでしょう。 –