クエリAとクエリBの間にパフォーマンスの違いはありますか?In()とワイルドカードを使用するSQL Serverのwhere句
クエリA
SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField LIKE '[1,m][6,e][n]%')
クエリBは
SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField IN ('16', 'Mens'))
クエリAとクエリBの間にパフォーマンスの違いはありますか?In()とワイルドカードを使用するSQL Serverのwhere句
クエリA
SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField LIKE '[1,m][6,e][n]%')
クエリBは
SELECT * FROM SomeTable
WHERE 1 = 1 AND (SomeField IN ('16', 'Mens'))
最初ははるかに遅いかもしれません。定数プレフィックスがない限り、LIKE
ではインデックスを使用できません。たとえば、LIKE 'foo%'
です。したがって、最初のクエリにはテーブルスキャンが必要です。ただし、2番目のクエリでは、SomeField
のインデックスを使用できます。
最初のクエリでは、 '1en'と一致するため、間違った結果が返されます。
まず、それらは同等ではありません。 –
なぜ1 = 1を使用していますか? – vulkanino
@vulkanino:ここをクリックしてください:http://stackoverflow.com/questions/242822/why-would-someone-use-where-1-1and-conditions-in-a-sql-clause –