Heim >Datenbank >MySQL-Tutorial >Datenbank Catch-30
Datenbank Catch-30
1. Grundlegende Spezifikationen
(1) Es muss die InnoDB-Speicher-Engine verwendet werden
Interpretation: Unterstützt Transaktionen, Sperren auf Zeilenebene, bessere Parallelitätsleistung, CPU- und Speicher-Cache-Seitenoptimierung, was zu einer höheren Ressourcennutzung führt
(2) Der UTF8-Zeichensatz muss verwendet werden
Interpretation: Universeller Code, keine Transkodierung erforderlich, keine Gefahr verstümmelter Zeichen, Platzersparnis
(3) Chinesische Kommentare müssen zu Datentabellen und Daten hinzugefügt werden Felder
Interpretation: Wer wird in N Jahren wissen, wozu die Felder r1, r2, r3 dienen
(4) Es ist verboten, gespeicherte Prozeduren, Ansichten, Trigger und Ereignisse zu verwenden
Interpretation: Hohe Parallelität Für das Daten-Internetgeschäft besteht die architektonische Designidee darin, die Datenbank-CPU freizugeben und Berechnungen auf die Serviceschicht zu übertragen Der Umfang der Parallelität ist groß, diese Funktionen sind sehr wichtig. Es ist möglich, die Datenbank zu zerstören und die Geschäftslogik für eine bessere Skalierbarkeit in die Serviceschicht zu verlagern, was leicht erreicht werden kann"Maschine vergrößern und Leistung steigern". Datenbanken eignen sich gut zum Speichern und Indizieren, daher sollten die CPU-Berechnungen nach oben verschoben werden
(5) Es ist verboten, große Dateien oder Fotos zu speichern
Interpretation: Warum sollte die Datenbank Dinge tun lassen, die sie nicht tut? gut darin? Große Dateien und Fotos werden im Dateisystem gespeichert. Es wäre toll, URIs in der Datenbank zu speichern
2. Namenskonventionen
(6) Nur Intranet-Domänennamen sind erlaubt, nicht IP-Verbindung zur Datenbank
(7) Online-Umgebung, Entwicklungsumgebung und Testumgebung Der Intranet-Domänenname der Datenbank folgt der Namenskonvention
● Firmenname: xxx
● Online-Umgebung: dj .xxx.db
● Entwicklungsumgebung: dj.xxx.rdb
● Testumgebung: dj.xxx.tdb
● Fügen Sie das Logo -s nach dem Namen der Slave-Bibliothek hinzu, fügen Sie das Zeichen -ss nach dem Namen der Sicherungsdatenbank hinzu
● Online-Slave-Datenbank: dj.xxx-s.db
● Online-Sicherungsdatenbank: dj.xxx-sss.db
(8) Bibliotheksname, Tabellenname, Feldname: Kleinbuchstaben, Unterstreichungsstil, nicht mehr als 32 Zeichen, der Name muss klar verständlich sein, keine Vermischung Pinyin und Englisch sind zulässig
(9) Tabellenname t_xxx, nicht eindeutiger Indexname idx_xxx, eindeutiger Indexname uniq_xxx
3. Spezifikationen für das Tabellendesign
(10) Die Anzahl der einzelnen Instanztabellen muss weniger als 500 betragen.
( 11) Die Anzahl der Spalten in einer einzelnen Tabelle muss weniger als 30 betragen.
(12) Die Tabelle muss einen Primärschlüssel haben, z. B. einen sich automatisch erhöhenden Primärschlüssel
Interpretation:
* a) Der Primärschlüssel wird inkrementiert und die Datenzeile wird geschrieben. Das Einfügen kann die Einfügeleistung verbessern. Vermeiden Sie ` Seitenaufteilung, Reduzierung der Tabellenfragmentierung und Verbesserung der Speicherplatz- und Speichernutzung
* b) Wählen Sie einen kürzeren Datentyp für den Primärschlüssel. Der normale Index der Innodb-Engine kann den Wert des Primärschlüssels speichern Reduzieren Sie effektiv den Speicherplatz des Index und verbessern Sie die Cache-Effizienz des Index
* c) Das Löschen von Tabellen ohne Primärschlüssel in der Master-Slave-Architektur des Zeilenmodus führt zu einer Überlastung der Standby-Datenbank
(13) Die Verwendung von Fremdschlüsseln ist verboten. Bei Einschränkungen der Fremdschlüsselintegrität ist eine Anwendungskontrolle erforderlich
Interpretation: Fremdschlüssel verursachen Tabelle In Verbindung mit Tabellen umfassen Aktualisierungs- und Löschvorgänge verknüpfte Tabellen, was die Leistung von SQL stark beeinträchtigt und sogar einen Deadlock verursacht. Hohe Parallelität kann leicht zu einer Datenbankleistung führen. Big Data-Geschäftsszenarien mit hoher Parallelität verwenden Datenbanken mit Leistungspriorität
4. Fields Design-Spezifikation
(14) Das Feld muss als NOT NULL definiert sein und einen Standardwert bereitstellen
Interpretation:
* a) Nullspalten ermöglichen Index/Indexstatistiken / Wertevergleiche sind komplexer und es ist schwieriger, sie für MySQL zu optimieren.
* b) null Diese Art von MySQL erfordert eine spezielle interne Verarbeitung, was die Komplexität der Datenbankverarbeitungsdatensätze unter den gleichen Bedingungen erhöht mehr in der Tabelle Wenn es mehrere Nullfelder gibt, wird die Verarbeitungsleistung der Datenbank stark reduziert
* c) Nullwerte erfordern mehr Speicherplatz und Nullspalten in jeder Zeile in der Tabelle oder Index erfordert zusätzlichen Platz. !=, nicht in diesen Operationssymbolen. Beispiel: wo name!='shenjian', wenn ein Datensatz mit einem Nullwert im Namen vorhanden ist, enthält das Abfrageergebnis den Datensatz mit einem Nullwert im Namen nicht
(15) Das ist es Die Verwendung von TEXT- und BLOB-Typen ist verboten
Interpretation: Dadurch wird mehr Festplatten- und Speicherplatz verschwendet, und eine große Anzahl unnötiger großer Feldabfragen eliminiert heiße Daten, was zu einem starken Rückgang der Speichertrefferrate führt und sich auf die Datenbank auswirkt Leistung
(16) Die Verwendung von Dezimalzahlen ist verboten. Währung speichern
Interpretation: Verwenden Sie ganze Zahlen, Dezimalzahlen können leicht zu einer Geldinkongruenz führen
(17) Sie müssen varchar( 20) zum Speichern von Mobiltelefonnummern
Interpretation:
* a) Bei Vorwahlen oder Ländervorwahlen kann „+-()“ erscheinen
* b ) Werden Mobiltelefonnummern mathematische Operationen durchführen?
* c) varchar kann Fuzzy-Abfragen unterstützen, zum Beispiel: „like „138%““
(18) Die Verwendung von ENUM ist verboten, TINYINT kann anstelle von
verwendet werdenInterpretation:
* a) Das Hinzufügen eines neuen ENUM-Werts erfordert eine DDL-Operation
* b) Der tatsächliche interne Speicher von ENUM ist eine Ganzzahl. Glauben Sie, dass Sie eine Zeichenfolge definieren? ?
5. Spezifikationen für das Indexdesign
(19) Es wird empfohlen, einzelne Tabellenindizes innerhalb von 5
(20) zu steuern. Die Anzahl der einzelnen Indexfelder beträgt darf 5 nicht überschreiten
Interpretation: Wenn mehr als 5 Felder vorhanden sind, ist die Datenfilterung nicht mehr effektiv
(21) Es ist verboten, Indizes für Attribute zu erstellen, die häufig aktualisiert werden und weisen eine geringe Differenzierung auf
Interpretation:
* a) Aktualisierungen verändern den B+-Baum und die Indizierung häufig aktualisierter Felder verringert die Datenbankleistung erheblich
* b) „Geschlecht“ ist nicht unterscheidbar. Für große Attribute ist es sinnlos, einen Index zu erstellen. Die Leistung ist mit der eines vollständigen Tabellenscans vergleichbar. (22) Beim Erstellen eines kombinierten Index müssen Sie angeben stark differenzierte Felder davor
Interpretation: Kann Daten effektiver filtern
6. SQL-Verwendungsspezifikationen(23) Die Verwendung von SELECT ist verboten *, nur erforderliche Felder abrufen und Anweisungen anzeigen müssen Spaltenattribute
Interpretation:
* a) Das Lesen unnötiger Spalten erhöht den CPU-, IO- und NET-Verbrauch
* b) Abdeckindizes können nicht effektiv genutzt werden
* c) Die Verwendung von „SELECT *“ ist anfällig für Programmfehler nach dem Hinzufügen oder Löschen von Feldern
(24) Die Verwendung von INSERT INTO t_xxx VALUES ist verboten (xxx) und die angegebenen eingefügten Spaltenattribute müssen angezeigt werden
Interpretation: Nach dem Hinzufügen oder Löschen von Feldern tritt wahrscheinlich ein Programmfehler auf
(25) Die Verwendung der impliziten Konvertierung von Attributen ist verboten
Interpretation: `SELECT uid FROM t_user WHERE phone=13812345678` Ja Dies führt zu einem vollständigen Tabellenscan, kann aber nicht auf den Telefonindex zugreifen. Ratet mal, warum? (Diese Online-Frage ist mehr als einmal aufgetaucht)
(26) Es ist verboten, Funktionen oder Ausdrücke für die Attribute von WHERE-Bedingungen zu verwenden
Interpretation: `SELECT uid FROM t_user WHERE from_unixtime(day )> ;='2017-02-15'` führt zu einem vollständigen Tabellenscan
Die korrekte Schreibweise lautet: `SELECT uid FROM t_user WHERE day>= unix_timestamp('2017-02-15 00 :00:00') `
(27) Negative Abfragen und Fuzzy-Abfragen, die mit % beginnen, sind verboten
Interpretation:
* a) Negative Abfragebedingungen: `NICHT, !=, < ;>, !<, !>, NOT IN, NOT LIKE` usw. führen zu einem vollständigen Tabellenscan
* b) Fuzzy-Abfragen, die mit „%“ beginnen, führen dazu ein vollständiger Tabellenscan
(28) Verbieten Sie großen Tabellen die Verwendung von JOIN-Abfragen und verbieten Sie großen Tabellen die Verwendung von Unterabfragen
Interpretation: Es werden temporäre Tabellen generiert, die mehr Speicher und CPU verbrauchen, was sich stark auf die Datenbank auswirkt Leistung
(29) Die Verwendung von ODER-Bedingungen muss in IN-Abfragen geändert werden
Interpretation: Die ODER-Abfrage der alten Version von MySQL kann den Index nicht treffen, auch wenn sie den Index erreichen kann Warum sollte die Datenbank mehr CPU verbrauchen, um die Abfrage zu implementieren? Was ist mit der Optimierung?
(30) Anwendungen müssen SQL-Ausnahmen erfassen und entsprechend behandeln
Zusammenfassung: Internetunternehmen mit großen Datenmengen und hoher Parallelität wirken sich stark auf die Leistung der Datenbank aus und dürfen dies nicht tun Benutzt.
Empfohlenes Lernen:
MySQL-TutorialDas obige ist der detaillierte Inhalt vonDatenbank Catch-30. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!