私はこれがかなり基本的な質問であることを知っています、そして私は考える私は答えを知っています...しかし私は確認したいと思います。
これらのクエリは本当に同等ですか?
SELECT * FROM FOO WHERE BAR LIKE 'X'
SELECT * FROM FOO WHERE BAR ='X'
おそらく、ワイルドカードなしでlikeを使用すると、パフォーマンスのオーバーヘッドが発生しますか?
オプションでLIKEとワイルドカードを使用するアプリがあります。 SPは現在、likeを実行し、ワイルドカードを追加します-likeを使用するようにクエリを更新することを考えていますが、必要に応じてアプリにワイルドカードを追加させます。
@ocdecioが言うように、オプティマイザーが十分に賢い場合は違いはありませんが、舞台裏で何が起こっているかを確認したい場合は、2つのクエリの実行プランを比較する必要があります。
ここ からのマットホイットフィールドによる元の回答
=
と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番目の式に減らします。