質問

これがかなり基本的な質問であることは承知していますが、 考える 答えはわかっていますが、確認したいのです。

これらのクエリは本当に同等なのでしょうか?

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番目の式に減らします。

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