where句がまったくない場合と比較して、値としてLIKEキーワードとワイルドカードを使用すると、クエリのパフォーマンスはどのようになるのでしょうか。
「WHEREALIKE'%'」などのwhere句について考えてみます。これは、列'a'のすべての可能な値と一致します。これは、where句がまったくない場合とどのように比較されますか。
私がこれを尋ねる理由は、ユーザーが検索する値を指定できるいくつかのフィールドがあるアプリケーションがあるからです。場合によっては、ユーザーは考えられるすべての結果を望んでいます。私は現在、次のような単一のクエリを使用しています。
SELECT * FROM TableName WHERE a LIKE ? AND b LIKE ?
'%'および'%'の値は、aおよびまたはbのすべての可能な値に一致するように指定できます。これは、アプリケーションで単一の名前付きクエリを使用できるので便利です。このためのパフォーマンスの考慮事項は何でしょうか。クエリオプティマイザは、LIKE'%'を単純にすべてに一致するように減らしますか?名前付きクエリ(プリペアドステートメント)を使用しているため、回答にも影響する可能性があることに気付きました。答えはおそらくデータベース固有であると思います。つまり、これはOracle、MS SQL Server、およびDerbyでどのように機能するのでしょうか。
これに対する別のアプローチは、ワイルドカードを入力するユーザーに基づいて3つの別々のクエリを使用することです。
Aはワイルドカードクエリです。
SELECT * FROM TableName WHERE b LIKE ?
Bはワイルドカードクエリです。
SELECT * FROM TableName WHERE a LIKE ?
AとBはワイルドカードです。
SELECT * FROM TableName
ワイルドカードなし:
SELECT * FROM TableName WHERE a LIKE ? AND b LIKE ?
明らかに、単一のクエリを持つことは、維持するのが最も簡単で簡単です。それでもパフォーマンスが良好な場合は、1つのクエリのみを使用します。