Ein großer Punkt ist, dass ein Index für bestimmte Arten der Suche überhaupt nicht hilft. Zum Beispiel:
SELECT * FROM [MyTable] WHERE [MyVarcharColumn] LIKE '%' + @SearchText + '%'
Kein Betrag der normalen Indizierung wird diese Abfrage helfen. Es ist für immer dazu verdammt, langsam zu sein. Das LIKE
Ausdruck ist einfach nicht sargable.
Warum? Sie müssen zuerst verstehen, wie Indizes funktionieren. Sie nehmen grundsätzlich die Spalten, die zusammen mit dem Primärschlüssel (Datensatzzeiger) in eine neue Tabelle indiziert werden. Sie sortieren dann diese Tabelle für die indizierte Spalte und nicht für den Schlüssel. Wenn Sie eine Suche mit dem Index durchführen, kann er die gewünschten Zeilen sehr schnell finden, da dieser Index sortiert ist, um eine effizientere Suche mit Algorithmen wie der binären Suche und anderen zu ermöglichen.
Schauen Sie sich diese Abfrage erneut an. Wenn Sie einen Platzhalter vor dem Suchtext platzieren, haben Sie der Datenbank gerade gesagt, dass Sie nicht sicher wissen, mit welcher Spalte die Spalte beginnt. Kein Sortieraufwand wird helfen; Sie müssen immer noch die gesamte Tabelle durchgehen, um sicherzustellen, dass Sie jeden Datensatz finden, der dem Ausdruck entspricht. Und das bedeutet, dass ein normaler Index für die Spalte für diese Abfrage wertlos ist.
Wenn Sie eine Textspalte nach einem Suchstring an einer beliebigen Stelle in der Spalte suchen möchten, müssen Sie etwas anderes verwenden: einen Volltextindex.
nun für den Kontrast zu dieser Abfrage aussehen:
SELECT * FROM [MyTable] WHERE [MyVarcharColumn] LIKE @SearchText + '%'
mit einem normalen Index Dies funktioniert völlig in Ordnung, weil Sie wissen, wie Sie die Spalte starten erwarten. Es kann immer noch mit den sortierten Werten übereinstimmen, die im Index gespeichert sind, und so können wir sagen, dass es sargable ist.
Denken Sie an eine Zeichenfolge als eine Reihe von Zahlen ... Hilfe? –