it-swarm.com.de

Leistung von '% Query%' im Vergleich zur Volltextsuche CONTAINS query

Ich habe eine Situation, in der ich suche ein einzelnes Wort.

Welche Abfrage wäre für dieses Szenario aus Performance-Sicht gut?

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

oder

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

?

40
dotnetguts

Die Volltextsuche (unter Verwendung von CONTAINS) ist schneller/effizienter als die Verwendung von LIKE mit Platzhaltern. Die Volltextsuche (FTS) bietet die Möglichkeit, Volltextindizes zu definieren, die von FTS verwendet werden können. Keine Ahnung, warum Sie keinen FTS-Index definieren würden, wenn Sie die Funktionalität nutzen möchten ...

LIKE mit Platzhalter auf der linken Seite (IE: LIKE '%Search') kann keinen Index verwenden (vorausgesetzt, für die Spalte existiert einer), wodurch ein Tabellenscan garantiert wird. Ich habe nicht getestet und verglichen, aber Regex hat die gleiche Falle. Um klarzustellen, LIKE '%Search' und LIKE '%Search%' kann nicht einen Index verwenden; LIKE 'Search%' kann einen Index verwenden.

39
OMG Ponies

Für eine typische Datenbank kann die CONTAINS-Suche viel schneller sein, vorausgesetzt, der entsprechende Volltextsuchindex wird für das gesuchte Feld erstellt. Die Auswertung des Operators LIKE verwendet in der Regel keinen Index und muss daher alle Daten lesen.

6
Mark Wilkins