ワイルドカードを使用しない SQL LIKE は「=」と同じですか?
質問
これがかなり基本的な質問であることは承知していますが、 考える 答えはわかっていますが、確認したいのです。
これらのクエリは本当に同等なのでしょうか?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
おそらく、ワイルドカードなしで like を使用するとパフォーマンスのオーバーヘッドがあるでしょうか?
オプションで LIKE とワイルドカードを使用するアプリがあります。現在、SP は like を実行し、ワイルド カードを追加します。like を使用するようにクエリを更新するだけですが、必要に応じてアプリにワイルド カードを追加させることを考えています。
解決
@ocdecioが言うように、オプティマイザーが十分にスマートであれば違いはありませんが、舞台裏で何が起こっているのかを確認したい場合は、2つのクエリの実行プランを比較する必要があります。
他のヒント
Matt Whitfield による元の回答 ここ
違いがあります 間 =
そして LIKE
. 。を使用して文字列比較を実行すると、 LIKE
, 、パターン文字列内のすべての文字が重要です。これには、先頭または末尾のスペースが含まれます。
したがって、次のような列がある場合、 char
または nchar
そしてそうではありません nvarchar
または varchar
, 、末尾のスペースにより結果が異なります。
この動作を再現する小さな例:
CREATE TABLE #temp (nam [varchar](MAX))
INSERT INTO [#temp] ([nam])
VALUES ('hello')
INSERT INTO [#temp] ([nam])
VALUES ('hello ')
SELECT * FROM #temp WHERE [nam] = 'hello '
SELECT * FROM #temp WHERE [nam] LIKE 'hello '
優れたオプティマイザは、最初の式を2番目の式に減らします。
所属していません StackOverflow