Eine kurze Diskussion darüber, welche Felder in Mysql für die Indizierung geeignet sind

Eine kurze Diskussion darüber, welche Felder in Mysql für die Indizierung geeignet sind

1 Die allgemeinen Regeln zum Erstellen von Datenbankindizes lauten wie folgt:

1. Der Primärschlüssel und der Fremdschlüssel der Tabelle müssen Indizes haben;
2. Tabellen mit mehr als 300 Daten sollten Indizes haben;
3. Für Tabellen, die häufig mit anderen Tabellen verbunden sind, sollten Indizes für die Verbindungsfelder erstellt werden.
4. Felder, die häufig in der Where-Klausel vorkommen, insbesondere in großen Tabellen, sollten indiziert werden.
5. Indizes sollten auf Feldern mit hoher Selektivität aufgebaut sein;
6. Indizes sollten auf kleinen Feldern erstellt werden. Erstellen Sie keine Indizes auf großen Textfeldern oder sogar sehr langen Feldern.
7. Die Erstellung zusammengesetzter Indizes erfordert eine sorgfältige Analyse. Erwägen Sie stattdessen die Verwendung von Einzelfeldindizes:

A. Wählen Sie das primäre Spaltenfeld im zusammengesetzten Index richtig aus. Im Allgemeinen handelt es sich dabei um ein Feld mit guter Selektivität.
B. Kommen in der Where-Klausel im AND-Modus häufig mehrere Felder eines zusammengesetzten Indexes gleichzeitig vor? Gibt es wenige oder keine Einzelfeldabfragen? Wenn ja, können Sie einen zusammengesetzten Index erstellen. Andernfalls ziehen Sie einen Einzelfeldindex in Betracht.
C. Wenn die im zusammengesetzten Index enthaltenen Felder in der Where-Klausel häufig allein vorkommen, zerlegen Sie sie in mehrere Einzelfeldindizes.
D. Wenn für diese Felder ein Einzelfeldindex und ein zusammengesetzter Index vorhanden sind, können Sie den zusammengesetzten Index im Allgemeinen löschen.

8. Erstellen Sie nicht zu viele Indizes für Tabellen, die häufig Datenoperationen durchführen;
9. Löschen Sie nicht benötigte Indizes, um negative Auswirkungen auf den Ausführungsplan zu vermeiden.

Bei den oben genannten Kriterien handelt es sich um allgemeine Beurteilungskriterien für die Erstellung von Indizes.
Die Erstellung von Indizes muss mit Vorsicht erfolgen. Die Notwendigkeit jedes Indexes muss sorgfältig analysiert werden und es muss eine Grundlage für seine Erstellung geben.
Denn zu viele Indizes sowie zu wenige oder falsche Indizes wirken sich nicht positiv auf die Leistung aus: Jeder für eine Tabelle erstellte Index erhöht den Speicheraufwand, und der Index erhöht auch den Verarbeitungsaufwand für Einfüge-, Lösch- und Aktualisierungsvorgänge. Darüber hinaus sind zu viele zusammengesetzte Indizes im Allgemeinen wertlos, wenn es Einzelfeldindizes gibt. Im Gegenteil, sie verringern die Leistung beim Hinzufügen und Löschen von Daten, insbesondere bei Tabellen, die häufig aktualisiert werden, wo die negativen Auswirkungen größer sind.
Kleine Tabellen sollten grundsätzlich nicht indiziert werden.
Oder wenn die Datenbank mehr als 100 Millionen Datenelemente aufzeichnet, wird die Verwendung einer nicht-relationalen Datenbank empfohlen.
Darüber hinaus gibt es auch einige Datenbanken mit speziellen Feldern, wie etwa BLOB- und CLOB-Feldern, die sich definitiv nicht für die Indizierung eignen.
Tatsächlich erinnert diese Frage eher an die Erfahrung mit der Durchführung von Softwareprojekten.

2. Fragen zur Indizierung von MySQL-Datenbanken mit mehreren zehn Millionen Datensätzen und Methoden zur Leistungssteigerung

1. Hinweise:

Zunächst sollten Sie prüfen, ob genügend Tabellen- und Festplattenspeicher vorhanden ist. Wir wissen, dass ein Index auch eine Art von Daten ist und dass die Erstellung eines Index zwangsläufig viel Tabellenplatz beansprucht. Wenn Sie einen Index für eine große Tabelle erstellen, müssen Sie daher zunächst die Speicherplatzkapazität berücksichtigen.
Zweitens muss die Tabelle beim Erstellen des Indexes gesperrt werden. Daher sollte darauf geachtet werden, den Vorgang nur dann auszuführen, wenn das Unternehmen inaktiv ist.

2. Leistungsanpassung:

Die erste Überlegung betrifft den Festplatten-E/A. Physisch sollten Sie versuchen, Indizes und Daten auf verschiedene Festplatten zu verteilen (unabhängig vom Array). Logischerweise ist der Datentabellenbereich vom Indextabellenbereich getrennt. Dies ist das Grundprinzip, das beim Erstellen eines Index befolgt werden sollte.

Zweitens wissen wir, dass beim Erstellen eines Indexes die gesamte Tabelle gescannt werden muss. Daher sollten wir in Betracht ziehen, den Wert des Initialisierungsparameters db_file_multiblock_read_count zu erhöhen. Im Allgemeinen auf 32 oder höher eingestellt.

Auch hier gilt, dass neben dem Scannen der gesamten Tabelle auch eine große Anzahl von Sortiervorgängen für die Daten erforderlich ist, um einen Index zu erstellen. Daher sollte die Größe des Sortierbereichs angepasst werden.

Vor 9i können Sie die Größe von sort_area_size auf Sitzungsebene erhöhen, beispielsweise auf 100 m oder mehr festlegen.

Wenn der Wert des Initialisierungsparameters workarea_size_policy nach 9i TRUE ist, wird der Sortierbereich automatisch von pga_aggregate_target zugewiesen.

Schließlich können Sie beim Erstellen eines Indexes die Option „Nologging“ hinzufügen. Dadurch kann die Anzahl der während der Indizierung generierten Wiederholungsvorgänge verringert und die Ausführungsgeschwindigkeit erhöht werden.

Probleme, die bei der Optimierung von MySql-Indizes beachtet werden müssen

Gut konzipierte MySql-Indizes können Ihrer Datenbank zu Höchstleistungen verhelfen und die Datenbankeffizienz erheblich verbessern. Beim Entwerfen eines MySQL-Index müssen einige Dinge beachtet werden:

1. Erstellen Sie einen Index

Für Anwendungen, bei denen Abfragen im Mittelpunkt stehen, sind Indizes besonders wichtig. Häufig sind Leistungsprobleme einfach darauf zurückzuführen, dass das Hinzufügen eines Index vergessen wurde oder kein effektiverer Index hinzugefügt wurde. Wenn kein Index hinzugefügt wird, wird ein vollständiger Tabellenscan durchgeführt, um bestimmte Daten zu finden, auch wenn es sich nur um bestimmte Daten handelt. Wenn eine Tabelle eine große Datenmenge enthält, aber nur wenige Ergebnisse, die die Bedingungen erfüllen, führt das Nichthinzufügen eines Index zu einer schwerwiegenden Leistungsverschlechterung. Es ist jedoch nicht in allen Situationen notwendig, einen Index zu erstellen. Beispielsweise kann das Geschlecht nur zwei Werte haben. Das Erstellen eines Indexes hat nicht nur keinen Vorteil, sondern wirkt sich auch auf die Aktualisierungsgeschwindigkeit aus. Dies wird als Überindizierung bezeichnet.

2. Zusammengesetzter Index

Es gibt beispielsweise einen Satz wie diesen:

Wählen Sie * aus Benutzern mit Bereich='Peking' und Alter=22; 

Wenn wir jeweils einen einzelnen Index für Bereich und Alter erstellen, führt die Erstellung eines zusammengesetzten Indexes für die Spalten „Bereich“ und „Alter“ zu einer höheren Effizienz, da MySQL-Abfragen immer nur einen Index gleichzeitig verwenden können. Dies hat zwar die Effizienz im Vergleich zum vollständigen Tabellenscan ohne Indizierung erheblich verbessert, doch bringt die Erstellung eines zusammengesetzten Indexes für die Spalten „Bereich“ und „Alter“ eine höhere Effizienz. Wenn wir erstellen (Bereich, Alter,
Gehalt), dann ist dies gleichbedeutend mit der Erstellung von drei Indizes: (Bereich, Alter, Gehalt), (Bereich, Alter), (Bereich), was als beste Funktion mit linkem Präfix bezeichnet wird. Daher sollten wir beim Erstellen eines zusammengesetzten Indexes die Spalten, die am häufigsten als Einschränkungen verwendet werden, in absteigender Reihenfolge nach links platzieren.

3. Der Index enthält keine Spalten mit NULL-Werten

Solange die Spalte NULL-Werte enthält, wird sie nicht in den Index aufgenommen. Solange eine Spalte in einem zusammengesetzten Index NULL-Werte enthält, ist diese Spalte für diesen zusammengesetzten Index ungültig. Daher sollten wir beim Entwerfen der Datenbank den Standardwert des Felds nicht auf NULL setzen.

4. Verwenden Sie kurze Indizes

Beim Indizieren einer Serienspalte sollte nach Möglichkeit eine Präfixlänge angegeben werden. Wenn Sie beispielsweise eine Spalte vom Typ CHAR(255) haben und die meisten Werte innerhalb der ersten 10 oder 20 Zeichen eindeutig sind, indizieren Sie nicht die gesamte Spalte. Kurze Indizes können nicht nur die Abfragegeschwindigkeit verbessern, sondern auch Speicherplatz und E/A-Vorgänge sparen.

5. Problem beim Sortieren des Index

MySQL-Abfragen verwenden nur einen Index. Wenn der Index also bereits in der Where-Klausel verwendet wird, verwenden die Spalten in der Order By-Klausel den Index nicht. Verwenden Sie daher keine Sortiervorgänge, wenn die Standardsortierung der Datenbank die Anforderungen erfüllen kann. Versuchen Sie, die Sortierung mehrerer Spalten zu vermeiden. Bei Bedarf erstellen Sie am besten einen zusammengesetzten Index für diese Spalten.

6. Like-Anweisungsoperation

Im Allgemeinen wird von der Verwendung der Like-Operation abgeraten. Wenn sie verwendet werden muss, stellt auch die Art und Weise der Verwendung ein Problem dar. wie „%a%“ verwendet den Index nicht, aber wie „aaa%“ kann den Index verwenden.

7. Führen Sie keine Operationen an Spalten durch

Wählen Sie * aus Benutzern, wobei JAHR (Datum hinzufügen)

8. Verwenden Sie nicht NOT IN und Operationen

Weder die NOT IN- noch die IN-Operation verwenden den Index und führen zu einem vollständigen Tabellenscan. NOT IN kann durch NOT EXISTS ersetzt werden, und für id3 können Sie id>3 oder id verwenden.

Beispiel für das Hinzufügen eines Indexes:

ERSTELLEN SIE INDEX IDX_AUDITSTATUS AUF [shanghaiDB].[dbo].[Aktivität](AUDITSTATUS) MIT(ONLINE=ON)
 
ERSTELLEN SIE INDEX IDX_ANUMMID AUF [nantongDB].[dbo].[Orders](ANUM,MID) MIT(ONLINE=ON)
 
INDEX ERSTELLEN IDX_SiteCode ON Usercenter.[dbo].MO(SiteCode) MIT(ONLINE=ON)
 
INDEX ERSTELLEN IDX_AccessDt AUF [alle].[dbo].[AccessLog](AccessDt) MIT(ONLINE=EIN)

Index erstellen Hinweis: Wenn Sie einen Index für eine große Tabelle erstellen, denken Sie daran, den Parameter ONLINE hinzuzufügen.

Ich habe diese Tage die Datenbank optimiert. Ich hatte eine Tabelle mit 200 Millionen Datensätzen und stellte fest, dass ich einen gemeinsamen Index hinzufügen musste. Ich verwendete den gemeinsamen Erstellungsindex „index_name“ auf „tablename (entp_id,sell_date)“. Das Ergebnis war tragisch. Alle DML-Anweisungen wurden blockiert, wodurch das System nicht normal verwendet werden konnte. Glücklicherweise war es 22 Uhr und es waren nicht viele Benutzer da. Nach einer Stunde war der Index fertig und die Blockierung behoben.

Ich habe online nachgeschaut und festgestellt, dass man, wenn man den Online-Parameter hinzufügt, eine Online-Indizierung durchführen kann, ohne alle DML-Anweisungen zu blockieren. Das ist eine Lektion, die ich auf die harte Tour gelernt habe, und ich möchte sie mit Ihnen teilen. Die spezifischen Unterschiede zwischen dem Online-Hinzufügen und dem Nicht-Online-Hinzufügen sind wie folgt:

Der Einfluss von DML-Operationen auf die Indexerstellung. Wenn während des Erstellungsvorgangs andere Prozesse DML-Operationen an den Daten ausführen, die diesem Index entsprechen, wird der Erstellungsvorgang davon beeinflusst:

SQL> Tabelle Test erstellen (ID-Nummer, Name varchar2 (20)); 
Tabelle erstellt.

Starten Sie dann eine Sitzung neu:

SQL> in Testwerte einfügen (1, 'lms');
1 Zeile erstellt.
<kein Commit> 
SQL> Index t1 auf Test(ID) erstellen;
Erstelle Index t1 für Test(ID).
*
FEHLER in Zeile 1:
ORA-00054: Ressource beschäftigt und mit NOWAIT angegeben abrufen

Fügen Sie den Parameter „online“ hinzu. Nach dem Hinzufügen dieses Parameters wird Oracle nicht nur den Index während des Erstellungsprozesses online halten, sondern auch warten, bis alle DML-Vorgänge abgeschlossen sind, bevor der Index erstellt wird. Anschließend wird die DDL-Sperre abgerufen und mit der Erstellung begonnen.

SQL> Index t1 auf Test(ID) online erstellen;
<vor Commit halten>
<nach dem Commit> 
SQL> Festschreiben; 
Commit abgeschlossen.
Index geändert.

Wenn Sie sich nicht verpflichten, werden die oben genannten Vorgänge durchgeführt.

Daher ist es am besten, beim Erstellen und Neuaufbau von Indizes in Zukunft online hinzuzufügen.

Dies ist das Ende dieses Artikels darüber, welche MySQL-Felder für die Indizierung geeignet sind. Weitere relevante Inhalte zum Indexieren von MySQL-Feldern finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So verwalten Sie MySQL-Indizes und Datentabellen
  • Zusammenfassung einiger Tipps zum MySQL-Indexwissen
  • Vollständige Schritte zum Erstellen eines Hochleistungsindex in MySQL
  • Was Sie über das Erstellen von MySQL-Indizes wissen müssen
  • MySQL-Abfrage redundanter Indizes und ungenutzter Indexoperationen
  • Detaillierte Erklärung des Unterschieds zwischen MySQL-Normalindex und eindeutigem Index
  • Detaillierte Untersuchung des MySQL-Verbundindex
  • mysql Index hinzufügen mysql wie man einen Index erstellt
  • Zusammenfassung der MySQL-Indextypen sowie Tipps und Vorsichtsmaßnahmen bei der Verwendung
  • MySQL Create Index-Methode, Syntaxstruktur und Beispiele
  • MySQL Leistungsoptimierung Indexoptimierung
  • Analyse der Verbindung und des Unterschieds zwischen MySQL-Primärschlüssel und -Index
  • So erstellen Sie einen Tabellenindex in MySQL

<<:  So konfigurieren Sie den Redis-Sentinel-Modus in Docker (auf mehreren Servern)

>>:  js, um den Zahlungs-Countdown zu realisieren und zur Startseite zurückzukehren

Artikel empfehlen

Anwendung von HTML und CSS in Flash

Anwendung von HTML und CSS in Flash: Ich habe zufä...

Das Vue-Projekt implementiert eine Fortschrittsbalkenfunktion für den Dateidownload

Im täglichen Geschäftsleben gibt es zwei gängige ...

CentOS 7.2 erstellt einen Nginx-Webserver zum Bereitstellen des Uniapp-Projekts

Panther begann als Anfänger und ich bin immer noc...

Detaillierte Erklärung der Destrukturierungszuweisung in JavaScript

Inhaltsverzeichnis Konzept Array-Destrukturierung...

Verständnis und Beispielcode des Vue-Standardslots

Inhaltsverzeichnis Was ist ein Slot Grundlegendes...

Sechs Möglichkeiten zur Steigerung der Geschwindigkeit Ihrer Website

1. Ersetzen Sie die Adresse Ihrer .js-Bibliotheks...

Implementierung der Docker Compose-Mehrcontainerbereitstellung

Inhaltsverzeichnis 1. WordPress-Bereitstellung 1....

Docker+Selenium-Methode zur Realisierung automatischer Gesundheitsberichte

In diesem Artikel wird das Gesundheitsmeldesystem...