私はMSSQLについて正確にはわかりませんが、他のデータベースでLIKE節がどのように機能するかを教えていただけます。
あなたはあなたの選択のいずれかのワイルドカードを有効にクエリがなるように持っていない:
SELECT * FROM myTable WHERE myTable.columnA = 'bobo'
あなたは
SELECT * FROM myTable WHERE myTable.columnA LIKE 'bobo%'
することができ、その後myTable.columnA上の伝統的な非フルテキストインデックスを使用している場合しかし
SELECT * FROM myTable WHERE myTable.columnA LIKE '%bobo'
と
、インデックスを使用10
SELECT * FROM myTable WHERE myTable.columnA LIKE '%bobo%'
インデックスを使用できないため、サーバーがテーブルのすべての行を調べるフルテーブルスキャンが発生します。違いはワイルドカードが前面にあることです: '%bobo'。 DBはLIKE 'bobo%
'をインデックス上の範囲スキャンに変換できますが、ツリースタイルインデックスの性質のためにLIKE '%bobo'
とすることはできません。
本当にLIKE '%bobo'データが必要な場合は、内容reverse(myTable.columnA)を持つ派生カラムmyTable.columnBを作成し、その上にLIKE 'obob%'
を作成することを検討してください。
本当にLIKE '%bobo%'を実行する必要がある場合は、検索エンジンのようなデータベースを使用しており、全文索引付けを使用するか、外部の全文検索エンジンを使用する必要があります。
「iio統計情報を設定」を追加すると、i \ oと表の作業を表示できます。このクエリは多分(mytableがビューでない限り)必要はないでしょうが、 –