Welche der folgenden Abfragen ist schneller (LIKE vs CONTAINS)?
SELECT * FROM table WHERE Column LIKE '%test%';
oder
SELECT * FROM table WHERE Contains(Column, "test");
Die zweite (vorausgesetzt, Sie meinen CONTAINS
und setzen sie tatsächlich in eine gültige Abfrage) sollte schneller sein, da sie some als Indexform verwenden kann (in diesem Fall eine vollständige Textindex). Natürlich ist diese Form der Abfrage nur verfügbar if Die Spalte befindet sich in einem Volltextindex. Ist dies nicht der Fall, ist nur das erste Formular verfügbar.
Bei der ersten Abfrage mit LIKE kann kein Index verwendet werden, da dieser mit einem Platzhalter beginnt. Daher ist immer ein vollständiger Tabellenscan erforderlich.
Die CONTAINS
Abfrage sollte sein:
SELECT * FROM table WHERE CONTAINS(Column, 'test');
ENTHÄLT Sucht nach präzisen oder unscharfen (weniger präzisen) Übereinstimmungen mit einzelnen Wörtern und Phrasen, Wörtern in einem bestimmten Abstand voneinander oder nach gewichteten Übereinstimmungen in SQL Server.
CONTAINS kann suchen nach:
Nachdem ich beide Abfragen auf einer SQL Server 2012-Instanz ausgeführt habe, kann ich bestätigen, dass die erste Abfrage in meinem Fall die schnellste war.
Die Abfrage mit dem Schlüsselwort LIKE
ergab einen Clustered-Index-Scan.
Die CONTAINS
hatte auch einen Clustered-Index-Scan mit zusätzlichen Operatoren für die Volltextübereinstimmung und einen Merge-Join.
Versuchen Sie auch, dies zu ändern:
SELECT * FROM table WHERE Contains(Column, "test") > 0;
Dazu:
SELECT * FROM table WHERE Contains(Column, '"*test*"') > 0;
Ersterer findet Datensätze mit Werten wie "dies ist ein Test" und "ein Testfall ist der Plan".
Letzterer findet auch Datensätze mit Werten wie "ich teste dies" und "das ist das größte".
Ich denke, dass CONTAINS
länger gedauert hat und Merge
verwendet hat, weil Ihre Abfrage adventure-works.com
einen Bindestrich ("-") enthielt.
Der Bindestrich ist ein Unterbrechungswort, daher hat CONTAINS
den Volltextindex nach adventure
durchsucht und anschließend nach works.com
gesucht und die Ergebnisse zusammengeführt.