9

Zunächst sollte ich darauf hinweisen, dass ich nicht viel über SQL Server-Indizes weiß.Wird die Indexerstellung die Leistung der varchar (max) -Abfrage verbessern und den Index erstellen

Meine Situation ist, dass ich eine SQL Server 2008-Datenbanktabelle haben, die eine Varchar (max) Spalte in der Regel mit einem Los Text gefüllt hat.

Mein ASP.NET Web-Anwendung verfügt über eine Suchfunktion, die diese Spalte für Stichwortsuche abfragt, und in Abhängigkeit von der Anzahl der Keywords für ihr gesucht kann in der SQL-Abfrage eines oder mehr LIKE ‚% keyword%‘ Aussagen sein um die Suche zu machen.

Meine Webanwendung ermöglicht auch die Suche nach verschiedenen anderen Spalten in dieser Tabelle, nicht nur diese eine Spalte. Es gibt auch ein paar Joins von anderen Tabellen.

Meine Frage ist, lohnt es sich, einen Index für diese Spalte zu erstellen, um die Leistung dieser Suchanfragen zu verbessern? Und wenn ja, welche Art von Index und nur die Indizierung der einen Spalte ist ausreichend oder muss ich andere Spalten wie den Primärschlüssel und andere durchsuchbare Spalten einbeziehen?

Antwort

7

Es lohnt sich nicht, einen regulären Index zu erstellen, wenn Sie LIKE '% keyword%' suchen. Der Grund dafür ist, dass die Indexierung wie das Durchsuchen eines Wörterbuchs funktioniert, wobei Sie in der Mitte beginnen und dann die Differenz aufteilen, bis Sie das Wort gefunden haben. Diese Platzhalterabfrage ist wie die Aufforderung, ein Wort nachzuschlagen, das den Text "to" oder etwas enthält - die einzige Möglichkeit, Übereinstimmungen zu finden, besteht darin, das gesamte Wörterbuch zu scannen.

Sie könnten jedoch eine Volltextsuche in Betracht ziehen, die für diese Art von Szenario gedacht ist (see here).

0

Der beste Weg, um herauszufinden, ist eine Reihe von Testabfragen zu erstellen, die dem ähneln, was im wirklichen Leben passieren würde und versuchen, sie mit und ohne den Index gegen Ihre Datenbank auszuführen. Wenn Sie jedoch viele SELECT-Abfragen und kleine UPDATE/DELETE-Abfragen ausführen, kann ein Index Ihre Abfragen im Allgemeinen schneller machen.

Wenn Sie jedoch viele Aktualisierungen vornehmen, kann der Index Ihre Leistung beeinträchtigen. Sie müssen also wissen, mit welchen Abfragen Ihre Datenbank arbeiten muss, bevor Sie diese Entscheidung treffen.

15

Sie können einen Index für ein Varchar (max) -Feld nicht erstellen. Die maximale Anzahl an Bytes in einem Index beträgt 900. Wenn die Spalte größer als 900 Byte ist, können Sie den Index erstellen, aber jedes Einfügen mit mehr als 900 Byte schlägt fehl.

Ich empfehle Ihnen, über fulltext Suche zu lesen. Es sollte zu Ihnen passt in diesem Fall

+0

Diego, mein Verständnis ist, ich kann Index für eine varchar (max) -Spalte, solange es sein kann CREATE nur ein nicht gruppierte, offline Index und daß die var (max) Spalte INCLUDEed, z. B. nicht gruppierten Index Indexname ON Tablename (SomeColumn) schließen (VarcharMaxColumn) mit (ONLINE = OFF) – johna

+1

VARCHAR (max) in schließt auf einem Index, bedeutet dies nur Blattniveau auf dem Index teilnehmen, auf einer Suchanfrage wird es kaum genutzt – Diego

+1

MIT (ONLINE = OFF) ist keine Eigenschaft des Index werden bedeutet. Es zeigt an, dass der Index während der Erstellung offline gesetzt wird. Wenn Sie es auf ON setzen, wird der Index in der tempDB erstellt und die Tabelle ist während der Indexerstellung zugänglich. Es sollte für große Tabellen verwendet werden, bei denen das Erstellen eines Indexes sehr lange dauert und die Tabelle während der Erstellung nicht zugänglich sein kann. – Diego

20

Die beste Analogie, die ich jemals dafür, warum ein Index gesehen haben, helfen nicht '%wildcard%' gesucht:

Nehmen Sie zwei Personen. Geben Sie jedem das gleiche Telefonbuch. Sagen Sie der Person auf der linken Seite:

Sagen Sie mir, wie viele Leute in diesem Telefonbuch mit dem Nachnamen "Smith" sind.

nun an die Person sagen, auf der rechten Seite:

Sag mir, wie viele Menschen in diesem Telefonbuch mit dem Vornamen „Simon sind."

Ein Index ist wie ein Telefonbuch. Sehr einfach für die Sache zu suchen, die am Anfang ist. Sehr schwer für die Sache zu scannen, die in der Mitte oder am Ende ist.

Jeden Zeit, die ich habe dies in einer Sitzung wiederholt, ich sehe Glühbirnen Licht weitergehen, so dass ich dachte, dass es nützlich sein könnte, hier zu teilen.

+0

Dies ist die Analogie, die ich immer verwende. –