Welche der folgenden Abfragen ist schneller (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
oder
SELECT * FROM table WHERE Contains(Column, "test");
sql-server
performance
contains
sql-like
user667429
quelle
quelle
Antworten:
Die zweite (vorausgesetzt, Sie meinen
CONTAINS
, und tatsächlich in eine gültige Abfrage einfügen) sollte schneller sein, da sie eine Art Index verwenden kann (in diesem Fall einen Volltextindex). Diese Form der Abfrage ist natürlich nur verfügbar, wenn sich die Spalte in einem Volltextindex befindet. Ist dies nicht der Fall, ist nur das erste Formular verfügbar.Die erste Abfrage, die LIKE verwendet, kann keinen Index verwenden, da sie mit einem Platzhalter beginnt und daher immer einen vollständigen Tabellenscan erfordert.
Die
CONTAINS
Abfrage sollte lauten:quelle
CONTAINS
? Was davon? Die ursprüngliche Form der Frage hatte,Column CONTAIN("%test%",Column)>0
die nirgends annähernd gültig war. Es ist immer noch nicht ganz richtig.Nachdem ich beide Abfragen auf einer SQL Server 2012-Instanz ausgeführt habe, kann ich bestätigen, dass die erste Abfrage in meinem Fall am schnellsten war.
Die Abfrage mit dem
LIKE
Schlüsselwort zeigte einen Clustered-Index-Scan.Das
CONTAINS
hatte auch einen Clustered-Index-Scan mit zusätzlichen Operatoren für die Volltextübereinstimmung und einen Merge-Join.quelle
LIKE
Abfrage mit einem führenden Platzhalter kann den Indexteil nicht effizient verwenden. Es muss nur das Ganze gescannt werden. Obwohl es zweifellos einige Umstände gibt, unter denen der vollständige CI-Scan eine bessere Leistung erbringt als eine Abfrage unter Verwendung des Volltextindex (möglicherweise, wenn beispielsweise ein sehr hoher Anteil der Zeilen übereinstimmt), ist dies größtenteils die Ausnahme, die Sie nicht bestätigen können ".LIKE
.Ich denke,
CONTAINS
das hat länger gedauert und verwendet,Merge
weil Sie einen Bindestrich ("-") in Ihrer Abfrage hattenadventure-works.com
.Der Bindestrich ist ein Unterbrechungswort, daher wurde im
CONTAINS
Volltextindexadventure
nachworks.com
den Ergebnissen gesucht und danach gesucht und die Ergebnisse zusammengeführt.quelle
Versuchen Sie auch, dies zu ändern:
Dazu:
Ersteres findet Datensätze mit Werten wie " Dies ist ein Test " und " Ein Testfall ist der Plan ".
Letztere finden auch Datensätze mit Werten wie " Ich teste dies " und " Dies ist das Größte ".
quelle
CONTAINS
werden nur Präfixbegriffe wie "test *", keine Suffixbegriffe wie " test" und keine vollständige Teilstringsuche wie "* test " erwähnt. Ich habe es jedoch nicht versucht.