Ein Datenbankschema definiert die logische Struktur Ihrer Datenbank, einschließlich Tabellen, Spalten, Beziehungen, Indizes und Einschränkungen, die die Organisation und den Zugriff auf Daten beeinflussen. Es geht nicht nur darum, wie die Daten gespeichert werden, sondern auch darum, wie sie mit Abfragen, Transaktionen und anderen Vorgängen interagieren.
Diese Überprüfungen können Ihnen helfen, den Überblick über neue oder anhaltende Probleme zu behalten, bevor sie zu größeren Problemen werden. Nachfolgend können Sie tiefer in diese Schemaprüfungen eintauchen und genau herausfinden, wie Sie etwaige Probleme beheben können, wenn Ihre Datenbank die Prüfung nicht besteht. Denken Sie daran: Bevor Sie Schemaänderungen vornehmen, sichern Sie immer Ihre Daten, um sie vor potenziellen Risiken zu schützen, die bei Änderungen auftreten könnten.
Der Primärschlüssel ist ein wichtiger Teil jeder Tabelle, da er jede Zeile eindeutig identifiziert und effiziente Abfragen ermöglicht. Ohne einen Primärschlüssel können bei Tabellen Leistungsprobleme auftreten und bestimmte Tools wie Replikations- und Schemaänderungsdienstprogramme funktionieren möglicherweise nicht ordnungsgemäß.
Es gibt mehrere Probleme, die Sie vermeiden können, indem Sie beim Entwerfen von Schemata einen Primärschlüssel definieren:
Um eine PRIMARY KEY-Einschränkung für die Spalte „ID“ zu erstellen, wenn die Tabelle bereits erstellt ist, verwenden Sie das folgende SQL:
ALTER TABLE Persons ADD PRIMARY KEY (ID);
So definieren Sie einen Primärschlüssel für mehrere Spalten:
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
Hinweis: Wenn Sie den Befehl ALTER TABLE verwenden, müssen die Primärschlüsselspalten beim ersten Erstellen der Tabelle so deklariert worden sein, dass sie keine NULL-Werte enthalten.
Die MyISAM-Speicher-Engine ist veraltet und Tabellen, die sie noch verwenden, sollten zu InnoDB migriert werden. InnoDB ist aufgrund seiner überlegenen Leistung, Datenwiederherstellungsfunktionen und Transaktionsunterstützung die standardmäßige und empfohlene Engine für die meisten Anwendungsfälle. Die Migration von MyISAM zu InnoDB kann die Leistung in schreibintensiven Anwendungen erheblich verbessern, eine bessere Fehlertoleranz bieten und erweiterte MySQL-Funktionen wie Volltextsuche und Fremdschlüssel ermöglichen.
Warum InnoDB bevorzugt wird:
ALTER TABLE Persons ADD PRIMARY KEY (ID);
Die Verwendung unterschiedlicher Sortierungen über Tabellen hinweg oder sogar innerhalb einer Tabelle kann zu Leistungsproblemen führen, insbesondere bei Zeichenfolgenvergleichen und Verknüpfungen. Wenn sich die Sortierungen zweier String-Spalten unterscheiden, muss MySQL die Strings möglicherweise zur Laufzeit konvertieren, was die Verwendung von Indizes verhindern und Ihre Abfragen verlangsamen kann.
Wenn Sie Änderungen an gemischten Kollationstabellen vornehmen, können einige Probleme auftreten:
Bevor Sie Änderungen an den Sortiereinstellungen Ihrer Datenbank vornehmen, testen Sie Ihren Ansatz in einer Nicht-Produktionsumgebung, um unbeabsichtigte Folgen zu vermeiden. Wenn Sie sich über irgendetwas unsicher sind, wenden Sie sich am besten an einen DBA.
Rufen Sie den Standardzeichensatz und die Standardsortierung für alle Datenbanken ab:
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
Überprüfen Sie die Sortierung bestimmter Tabellen:
ALTER TABLE <table_name> ENGINE=InnoDB;
Suchen Sie den Standardzeichensatz des Servers:
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA;
Suchen Sie die Standardsortierung des Servers:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_COLLATION IS NOT NULL ORDER BY TABLE_SCHEMA, TABLE_COLLATION;
Aktualisieren Sie die Sortierung für eine bestimmte Datenbank:
SELECT @@GLOBAL.character_set_server;
Aktualisieren Sie die Sortierung für eine bestimmte Tabelle:
SELECT @@GLOBAL.collation_server;
Gemischte Zeichensätze ähneln gemischten Sortierungen insofern, als sie zu Leistungs- und Kompatibilitätsproblemen führen können. Ein gemischter Zeichensatz liegt vor, wenn verschiedene Spalten oder Tabellen unterschiedliche Codierungsformate zum Speichern von Daten verwenden.
Bevor Sie die Zeicheneinstellungen Ihrer Datenbank anpassen, testen Sie die Änderungen unbedingt in einer Staging-Umgebung, um unerwartete Probleme zu vermeiden. Wenn Sie sich bei den einzelnen Schritten nicht sicher sind, wenden Sie sich an einen DBA.
Rufen Sie den Standardzeichensatz und die Standardsortierung für alle Datenbanken ab:
ALTER TABLE Persons ADD PRIMARY KEY (ID);
Den Zeichensatz einer Spalte abrufen:
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
Suchen Sie den Standardzeichensatz des Servers:
ALTER TABLE <table_name> ENGINE=InnoDB;
Suchen Sie die Standardsortierung des Servers:
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA;
So zeigen Sie die Struktur einer Tabelle an:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_COLLATION IS NOT NULL ORDER BY TABLE_SCHEMA, TABLE_COLLATION;
Beispielausgabe:
SELECT @@GLOBAL.character_set_server;
So ändern Sie einen Spaltenzeichensatz:
SELECT @@GLOBAL.collation_server;
Für Tabellen, von denen erwartet wird, dass sie unbegrenzt wachsen und die automatische Inkrementierung für Primärschlüssel verwenden, wird empfohlen, zum Datentyp UNSIGNED BIGINT zu wechseln. Dadurch kann die Spalte einen viel größeren Wertebereich verarbeiten, sodass künftig keine kostspieligen Tabellenänderungen erforderlich sind, sobald der Maximalwert erreicht ist. Durch die Angabe von UNSIGNED werden nur positive Werte gespeichert, wodurch sich der Bereich des Datentyps effektiv verdoppelt.
So ändern Sie den Spaltentyp in UNSIGNED BIGINT:
ALTER DATABASE <db-name> COLLATE=<collation-name>;
Fremdschlüssel sorgen für Datenkonsistenz, indem sie die Beziehung zwischen übergeordneten und untergeordneten Tabellen aufrechterhalten, wirken sich aber auch auf die Datenbankleistung aus. Bei jedem Schreibvorgang sind zusätzliche Suchvorgänge erforderlich, um die Integrität der zugehörigen Daten zu überprüfen. Dies kann insbesondere in Umgebungen mit hohem Verkehrsaufkommen zu Verlangsamungen führen.
Wenn die Leistung ein Problem darstellt, sollten Sie die Entfernung von Fremdschlüsseln in Betracht ziehen, insbesondere in Szenarien, in denen die Datenkonsistenz auf Anwendungsebene gehandhabt werden kann.
So löschen Sie eine Fremdschlüsseleinschränkung aus einer Tabelle:
ALTER TABLE Persons ADD PRIMARY KEY (ID);
Doppelte Indizes in MySQL verbrauchen unnötigen Speicherplatz und verursachen zusätzlichen Overhead bei Schreibvorgängen, da jeder Index aktualisiert werden muss. Dies kann die Abfrageoptimierung erschweren und möglicherweise zu ineffizienten Ausführungsplänen führen, ohne einen wirklichen Nutzen zu bieten.
Identifizieren und entfernen Sie doppelte Indizes, um die Abfrageoptimierung zu optimieren und den Overhead zu reduzieren. Stellen Sie jedoch sicher, dass der Index nicht für kritische Abfragen verwendet wird, bevor Sie ihn entfernen.
Nicht verwendete Indizes in MySQL können sich negativ auf die Datenbankleistung auswirken, indem sie Speicherplatz verbrauchen, den Verarbeitungsaufwand beim Einfügen, Aktualisieren und Löschen erhöhen und den Gesamtbetrieb verlangsamen. Während Indizes für die Beschleunigung von Abfragen wertvoll sind, können diejenigen, die nicht verwendet werden, Ihr System unnötig belasten.
Zu den weiteren Vorteilen des Entfernens ungenutzter oder doppelter Indizes gehören:
Um nicht verwendete Indizierungen in MySQL oder MariabDB zu identifizieren, verwenden Sie bitte die folgende SQL-Anweisung:
ALTER TABLE Persons ADD CONSTRAINT PK_Person PRIMARY KEY (ID, LastName);
In MySQL 8.0 und höher können Sie Indizes unsichtbar machen, um zu testen, ob sie benötigt werden, ohne sie vollständig zu löschen:
ALTER TABLE <table_name> ENGINE=InnoDB;
Wenn die Leistung nicht beeinträchtigt wird, kann der Index sicher gelöscht werden:
SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA;
Sie können einen Index bei Bedarf wieder sichtbar machen:
SELECT TABLE_SCHEMA, TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_COLLATION IS NOT NULL ORDER BY TABLE_SCHEMA, TABLE_COLLATION;
Mit dem neuesten Update umfasst Releem jetzt umfassende Schema-Gesundheitsprüfungen. Diese Prüfungen bieten Echtzeit-Einblicke in die strukturelle Integrität Ihrer Datenbank sowie umsetzbare Empfehlungen zur Behebung erkannter Probleme.
Durch die Automatisierung des Schemaüberwachungsprozesses macht Releem das Rätselraten bei manuellen Prüfungen überflüssig und erspart Datenbankingenieuren so jede Menge Zeit und Mühe. Anstatt stundenlang an Schemadetails zu arbeiten, können Sie sich jetzt auf dringendere Aufgaben konzentrieren.
Das obige ist der detaillierte Inhalt vonTop-ySQL-Schemaprüfungen zur Steigerung der Datenbankleistung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!