2012-03-05 17 views
0

クエリ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')) 
+5

まず、それらは同等ではありません。 –

+1

なぜ1 = 1を使用していますか? – vulkanino

+0

@vulkanino:ここをクリックしてください:http://stackoverflow.com/questions/242822/why-would-someone-use-where-1-1and-conditions-in-a-sql-clause –

答えて

5

最初ははるかに遅いかもしれません。定数プレフィックスがない限り、LIKEではインデックスを使用できません。たとえば、LIKE 'foo%'です。したがって、最初のクエリにはテーブルスキャンが必要です。ただし、2番目のクエリでは、SomeFieldのインデックスを使用できます。

最初のクエリでは、 '1en'と一致するため、間違った結果が返されます。

+0

+1私たちがあなたからSQLを学ぶためのブログ:) – Sarfraz

+1

@マーク:オプティマイザはスマートになってはならないでしょうか?[C LIKE 'Q [ab]%' 'はインデックスを使用できますか?それは 'c LIKE 'Qa%'や' LIKE 'Qb%' 'と同じですから? –

+1

私の推測では、オプティマイザはLIKE 'Q [a-b]%'のQのインデックスのみを使用します。 – Paparazzi