web-dev-qa-db-ja.com

Like '%Query%'と全文検索CONTAINSクエリのパフォーマンス

単一の単語を検索にしたい状況があります。

そのシナリオでは、パフォーマンスの観点からどのクエリが適切でしょうか?

Select Col1, Col2 from Table Where Col1 Like '%Search%'

または

Select Col1, Col2 from Table Where Col1 CONTAINS(Col1,'Search')

40
dotnetguts

全文検索(CONTAINSを使用)は、LIKEをワイルドカードで使用するよりも高速/効率的です。全文検索(FTS)には、FTSが使用できる全文索引を定義する機能が含まれています。ダンノ機能を使用するつもりならFTSインデックスを定義しない理由...

左側にワイルドカードを使用したLIKE(IE:LIKE '%Search')インデックスを使用できません(列にインデックスが存在する場合)。テーブルスキャンを保証します。私はテストと比較をしていませんが、正規表現には同じ落とし穴があります。明確にするために、 LIKE '%Search'およびLIKE '%Search%' can notインデックスを使用します。 LIKE 'Search%'はインデックスを使用できます。

39
OMG Ponies

通常のデータベースの場合、適切な全文検索インデックスが検索対象のフィールドに構築されていると仮定すると、CONTAINS検索ははるかに高速になります。 LIKE演算子の評価では、通常インデックスを使用しないため、すべてのデータを読み取る必要があります。

6
Mark Wilkins