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; 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. 8. Erstellen Sie nicht zu viele Indizes für Tabellen, die häufig Datenoperationen durchführen; Bei den oben genannten Kriterien handelt es sich um allgemeine Beurteilungskriterien für die Erstellung von Indizes. 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. 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üssenGut 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 IndexFü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 IndexEs 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, 3. Der Index enthält keine Spalten mit NULL-WertenSolange 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 IndizesBeim 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 IndexMySQL-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-AnweisungsoperationIm 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 durchWählen Sie * aus Benutzern, wobei JAHR (Datum hinzufügen) 8. Verwenden Sie nicht NOT IN und OperationenWeder 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 konfigurieren Sie den Redis-Sentinel-Modus in Docker (auf mehreren Servern)
>>: js, um den Zahlungs-Countdown zu realisieren und zur Startseite zurückzukehren
Anwendung von HTML und CSS in Flash: Ich habe zufä...
Im täglichen Geschäftsleben gibt es zwei gängige ...
Hintergrund CVE-2021-21972 Eine nicht authentifiz...
Inhaltsverzeichnis Methode 1 Methode 2 Nach der I...
1. Abnormale Leistung beim Docker-Start: 1. Der S...
Panther begann als Anfänger und ich bin immer noc...
Inhaltsverzeichnis 1. Filtern, Zuordnen und Reduz...
Redux ist ein einfacher Statusmanager. Wir werden...
Vorwort In diesem Artikel wird erläutert, wie Sie...
Inhaltsverzeichnis Konzept Array-Destrukturierung...
Inhaltsverzeichnis Was ist ein Slot Grundlegendes...
1. Ersetzen Sie die Adresse Ihrer .js-Bibliotheks...
Inhaltsverzeichnis 1. WordPress-Bereitstellung 1....
Kürzlich bestand der Kunde eines Projekts darauf,...
In diesem Artikel wird das Gesundheitsmeldesystem...