Sie sollten auf jeden Fall etwas Zeit damit verbringen, sich mit der Indizierung zu beschäftigen. Es wird viel darüber geschrieben, und es ist wichtig zu verstehen, was los ist.
Im Allgemeinen legt ein Index den Zeilen einer Tabelle eine Reihenfolge auf.
Stellen Sie sich der Einfachheit halber vor, eine Tabelle sei nur eine große CSV-Datei. Immer wenn eine Zeile eingefügt wird, wird sie am Ende eingefügt . Die "natürliche" Reihenfolge der Tabelle ist also nur die Reihenfolge, in der Zeilen eingefügt wurden.
Stellen Sie sich vor, Sie haben diese CSV-Datei in einer sehr rudimentären Tabellenkalkulationsanwendung geladen. In dieser Tabelle werden lediglich die Daten angezeigt und die Zeilen in fortlaufender Reihenfolge nummeriert.
Stellen Sie sich nun vor, Sie müssen alle Zeilen mit dem Wert "M" in der dritten Spalte finden. Je nachdem, was Ihnen zur Verfügung steht, haben Sie nur eine Option. Sie scannen die Tabelle und überprüfen den Wert der dritten Spalte für jede Zeile. Wenn Sie viele Zeilen haben, kann diese Methode (ein "Tabellenscan") lange dauern!
Stellen Sie sich nun vor, Sie haben zusätzlich zu dieser Tabelle einen Index. Dieser bestimmte Index ist der Werteindex in der dritten Spalte. Der Index listet alle Werte aus der dritten Spalte in einer aussagekräftigen Reihenfolge (z. B. alphabetisch) auf und enthält für jeden von ihnen eine Liste der Zeilennummern, in denen dieser Wert angezeigt wird.
Jetzt haben Sie eine gute Strategie, um alle Zeilen zu finden, in denen der Wert der dritten Spalte "M" ist. Zum Beispiel können Sie eine binäre Suche durchführen ! Während beim Tabellenscan N Zeilen gesucht werden müssen (wobei N die Anzahl der Zeilen ist), müssen Sie bei der binären Suche im schlimmsten Fall nur log-n Indexeinträge betrachten. Wow, das ist sicher viel einfacher!
Wenn Sie über diesen Index verfügen und der Tabelle Zeilen hinzufügen (am Ende, da unsere konzeptionelle Tabelle so funktioniert), müssen Sie den Index natürlich jedes Mal aktualisieren. Sie erledigen also etwas mehr Arbeit, während Sie neue Zeilen schreiben, aber Sie sparen eine Menge Zeit, wenn Sie nach etwas suchen.
Im Allgemeinen führt die Indizierung zu einem Kompromiss zwischen Lese- und Schreibeffizienz. Ohne Indizes können Einfügungen sehr schnell sein - das Datenbankmodul fügt der Tabelle nur eine Zeile hinzu. Beim Hinzufügen von Indizes muss die Engine jeden Index aktualisieren, während das Einfügen ausgeführt wird.
Auf der anderen Seite werden Lesevorgänge viel schneller.
Hoffentlich deckt das Ihre ersten beiden Fragen ab (wie andere beantwortet haben - Sie müssen das richtige Gleichgewicht finden).
Ihr drittes Szenario ist etwas komplizierter. Wenn Sie LIKE verwenden, helfen Indizierungs-Engines normalerweise bei Ihrer Lesegeschwindigkeit bis zum ersten "%". Mit anderen Worten, wenn Sie SELECTING WHERE-Spalte wie 'foo% bar%' auswählen, verwendet die Datenbank den Index, um alle Zeilen zu finden, in denen die Spalte mit "foo" beginnt, und muss dann dieses Zwischenzeilenset scannen, um die Teilmenge zu finden das enthält "bar". SELECT ... WHERE Spalte LIKE '% bar%' kann den Index nicht verwenden. Ich hoffe du kannst sehen warum.
Schließlich müssen Sie über Indizes für mehr als eine Spalte nachdenken. Das Konzept ist das gleiche und verhält sich ähnlich wie bei LIKE. Wenn Sie einen Index für (a, b, c) haben, verwendet die Engine den Index weiterhin so gut wie möglich von links nach rechts. Eine Suche in Spalte a könnte also den Index (a, b, c) verwenden, ebenso wie eine in (a, b). Die Engine müsste jedoch einen vollständigen Tabellenscan durchführen, wenn Sie suchen, WO b = 5 UND c = 1)
Hoffentlich hilft dies dabei, ein wenig Licht ins Dunkel zu bringen, aber ich muss wiederholen, dass Sie am besten ein paar Stunden damit verbringen, nach guten Artikeln zu suchen, die diese Dinge ausführlich erklären. Es ist auch eine gute Idee, die Dokumentation Ihres speziellen Datenbankservers zu lesen. Die Art und Weise, wie Indizes von Abfrageplanern implementiert und verwendet werden, kann sehr unterschiedlich sein.