Frage

In Dokumentation für verschiedene ORMs sie bieten immer einen Weg Indizes zu erstellen, etc. Sie bitte immer sicher sein, die entsprechende Indizes für Effizienz zu schaffen, als ob die inhärente Wissen ist zu einem nicht-handgeschriebenen-SQLer der Bedürfnisse ein ORM zu verwenden. Mein Verständnis von Indizes (außerhalb von PK) ist im Grunde: Wenn Sie planen, LIKE Abfragen (dh Suche) zu tun, basierend auf dem Inhalt einer Spalte, können Sie einen Volltextindex für die Spalte verwendet werden sollen. Was soll ich Indizes weiß in Bezug auf (vor allem auf Effizienz in Bezug)? Ich fühle mich wie es ist eine Welt des Wissens an meiner Tür Schritt, aber es ist ein großes gefaltete Maus-Pad unter ihn gestaut, so kann ich nicht durchkommen (ich weiß nicht, warum ich das Gefühl, ich brauchte das zu sagen, aber dank für die Bereitstellung der Couch).

War es hilfreich?

Lösung

Denken Sie an einen Index sehr grob wie der Index in der Rückseite eines Buches. Es ist ein völlig separater Bereich vom Inhalt des Buches, wo, wenn Sie etwas bestimmten Wert suchen, können Sie in den Index gehen und schauen Sie (Indizes werden bestellt, so die Dinge dort zu finden, ist viel schneller als jede Seite des Buches scannen ).

Der Index-Eintrag hat eine Seitennummer, so können Sie dann auf der Seite schnell Ihr Thema suchen. Ein Datenbankindex ist sehr ähnlich; es ist eine geordnete Liste der relevanten Informationen in Ihrer Datenbank (Bereich (e) in den Index aufgenommen), mit Informationen für die Datenbank die Datensätze zu finden, die übereinstimmen.

So ... Sie würde einen Index erstellen, wenn Sie Informationen haben, die Sie häufig suchen auf benötigen. Normaler Indizes helfen Ihnen nicht für ‚teilweise‘ sucht wie LIKE Abfragen, aber jedes Mal, wenn Sie benötigen einen Satz von Ergebnissen zu erhalten, wo Feld X bestimmten Wert (s), halten sie die DBMS aus, um zu ‚Scan‘ die gesamte Tabelle , für passende Werte suchen.

Sie auch Hilfe, wenn Sie auf einer Spalte sortieren müssen.

Eine andere Sache im Auge zu behalten; Wenn das DBMS ermöglicht es Ihnen, einzelne Indizes zu erstellen, die mehrere Felder haben, werden Sie sicher, dass die Auswirkungen, dies zu tun, spezifisch für Ihr DBMS zu untersuchen. Ein Index, der mehrere Felder enthält, ist wahrscheinlich nur vollständig zu sein (oder überhaupt) sinnvoll, wenn alle diese Felder in einer Abfrage verwendet werden. Im Gegensatz dazu mehrere Indizes für eine einzelne Tabelle mit, mit einem Feld pro Index, nicht viel sein kann (oder jede) Hilfe für Abfragen, die durch mehrere Felder sind Filterung / Sortierung.


Sie haben erwähnt, Volltextindizes und PKs (Primärschlüssel). Diese sind anders als normaler Indizes, obwohl sie oft zu ähnlichen Zwecken dienen.

Beachten Sie zunächst, dass ein Primärschlüssel ist in der Regel ein Index (in MSSQL, ein ‚Clustered Index‘, in der Tat), aber dies muss nicht speziell der Fall sein. Als Beispiel ist ein MSSQL PK ein Clustered Index standardmäßig; Clustered-Indizes sind spezielle, dass sie an anderer Stelle keine separate Bit Daten gespeichert werden, aber die Daten selbst in der Tabelle, um durch den gruppierten Index angeordnet ist. Aus diesem Grunde ist ein beliebter PK ein int Wert ist, der mit sequentiellem, steigenden Werten automatisch generiert wird. So sortiert ein Clustered Index die Daten in der Tabelle und zwar durch den Wert des Feldes. Vergleichen Sie dies mit einem traditionellen Wörterbuch; die Einträge selbst werden durch den ‚Schlüssel‘ bestellt, die das Wort definiert ist.

Aber in MSSQL (überprüfen Sie Ihre DBMS-Dokumentation zu Ihrer Information), können Sie den Clustered Index ändern ein anderes Feld sein, wenn Sie möchten. Manchmal geschieht dies auf datetime basierend Felder aus.


Volltextindizes sind verschiedene Arten von Tieren ganz. Sie nutzen zum Teil die gleichen Prinzipien, aber was sie tun, ist nicht genau das gleiche wie normale Indizes, die ich beschreibe. Außerdem: In einigen DBMS, LIKE Abfragen tun nicht verwendet den Volltext-Index; spezielle Abfrageoperatoren erforderlich sind.

Diese Indizes anders, weil ihre Absicht nicht zu finden ist / Art auf dem gesamten Wert der Spalte (eine Zahl, ein Datum, ein kurzes Stück von char-Daten), sondern einzelne Worte / Phrasen im Textfeld zu finden (en) indiziert werden.

Sie können oft auch ermöglichen, nach ähnlichen Wörtern, verschiedenen Zeiten suchen, häufige Rechtschreibfehler und dergleichen, und in der Regel Füllwörter ignorieren. Die unterschiedliche Art und Weise, in der sie arbeiten, weshalb sie auch verschiedene Betreiber benötigt, sie zu nutzen. (Wieder, überprüfen Sie Ihre lokale Dokumentation Ihres DBMS!)

Andere Tipps

Diese Antwort ist Oracle-spezifisch, aber die wichtigsten Punkte in den Antworten auf die meisten relationalen Datenbanksystemen

Wie wählen und Optimierung von Oracle-Indizes?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top