Vorwort Die Datenbank war schon immer meine Schwachstelle. Ich werde meine eigenen Erfahrungen (Python + SQLAlchemy) kombinieren und eine Aufzeichnung machen. Ich bevorzuge die Verwendung von ORM. Ich habe immer das Gefühl, dass die Rechtschreibung von SQL eine schmerzhafte Sache ist (hauptsächlich, weil ich nicht gut in SQL bin). Ich bin in früheren Wartungsprojekten auch auf einige Datenbankfallen gestoßen, wie z. B. Kodierungsprobleme, Verlust der Gleitkommagenauigkeit usw., um zu verhindern, dass sich die Fallstricke in Zukunft wiederholen. Kapitel 1: Verwenden der Hilfe Verwenden Sie den in MySQL integrierten Hilfebefehl
Kapitel 2: Auswahl des Tabellentyps (Speicher-Engine) Die beiden am häufigsten verwendeten Engines sind: 1. Myisam ist die Standardspeicher-Engine von MySQL. Wenn create eine neue Tabelle erstellt und die Speicher-Engine der neuen Tabelle nicht angibt, wird standardmäßig Myisam verwendet. Jedes MyISAM wird in drei Dateien auf der Festplatte gespeichert. Die Dateinamen sind dieselben wie die Tabellennamen und die Erweiterungen sind .frm (zum Speichern der Tabellendefinition), .MYD (MYData, zum Speichern von Daten) und .MYI (MYIndex, zum Speichern von Indizes). Datendateien und Indexdateien können in verschiedenen Verzeichnissen abgelegt werden, um die E/A gleichmäßig zu verteilen und eine höhere Geschwindigkeit zu erreichen. 2. Die InnoDB-Speicher-Engine bietet Transaktionssicherheit mit Commit-, Rollback- und Crash-Recovery-Funktionen. Im Vergleich zur MyISAM-Speicher-Engine schreibt InnoDB jedoch weniger effizient und benötigt mehr Speicherplatz, um Daten und Indizes beizubehalten. Gemeinsame Umgebung: 1. MyISAM: Die standardmäßige MySQL-Plug-In-Speicher-Engine, die eine der am häufigsten verwendeten Speicher-Engines im Web, im Data Warehousing und in anderen Anwendungsumgebungen ist 2. InnoDB: Wird für Anwendungen zur Transaktionsverarbeitung verwendet und verfügt über viele Funktionen, einschließlich ACID-Transaktionsunterstützung. Kapitel 3: Den richtigen Datentyp auswählen Wählen Sie zunächst die entsprechende Speicher-Engine aus und bestimmen Sie den entsprechenden Datentyp basierend auf der angegebenen Speicher-Engine.
Einige zu beachtende Datentypen: 1. char und varchar: Die Speicher- und Abrufmethoden sind unterschiedlich, und auch die maximale Länge und die Frage, ob der nachfolgende Leerraum beibehalten wird, sind unterschiedlich. char hat eine feste Länge. Wenn die Länge nicht ausreicht, wird es mit Leerzeichen aufgefüllt. Wenn PAD_CHAR_TO_FULL_LENGTH beim Abrufen nicht festgelegt ist, werden die nachstehenden Leerzeichen standardmäßig entfernt. 2. Text und 3. Gleitkommazahl Float und Festkommazahl Dezimal: Beachten Sie einige Punkte: 1. Obwohl Gleitkommazahlen einen größeren Datenbereich darstellen können, weisen sie Fehlerprobleme auf. 2. Für Probleme, bei denen es auf Genauigkeit ankommt, wie z. B. Währungen, sollte Festkommaspeicher verwendet werden. Ich bin bei früheren Projekten auf einige Probleme gestoßen und musste sie schließlich durch Vergrößern und Verkleinern lösen, was unschön war. 3. Wenn Sie beim Programmieren auf Gleitkommazahlen stoßen, achten Sie auf das Fehlerproblem und versuchen Sie, Gleitkommavergleiche zu vermeiden (beim Vergleich von Gleitkommazahlen muss der Unterschied kleiner als eine bestimmte Genauigkeit sein). In Python 3.5 können Sie folgendermaßen vergleichen: 4. Achten Sie auf die Verarbeitung einiger Sonderwerte in Gleitkommazahlen. Kapitel 4: Zeichensätze Es ist wichtig, gleich zu Beginn den richtigen Zeichensatz auszuwählen, da eine spätere Änderung sonst sehr aufwändig wird. Der Zeichensatz ist ein seit langem bestehendes Problem in Python 2, das viele Neulinge verwirrt. Das Projekt, das ich vorher betreut habe, verwendete den Standard-Latin1-Zeichensatz von msyql, was dazu führte, dass die Zeichenfolge bei jedem Schreiben manuell in UTF-8 kodiert werden musste. Ich habe kürzlich bei der Durchführung von Projekten Python3.5+Flask verwendet und dabei direkt UTF-8 verwendet. Seitdem hatte ich nie wieder Probleme mit der Kodierung:
Kapitel 5: Entwurf und Verwendung von Indizes Alle MySQL-Spaltentypen können indiziert werden und die Verwendung von Indizes für relevante Spalten ist die beste Möglichkeit, die Leistung von Auswahlvorgängen zu verbessern. Grundsätze der Indexgestaltung: 1. Die durchsuchte Indexspalte ist nicht notwendigerweise die auszuwählende Spalte. Für die Indizierung sind die Spalten am besten geeignet, die in der Where-Klausel erscheinen oder in einer Join-Klausel angegeben sind, und nicht die Spalten, die in der Auswahlliste nach dem Select-Schlüsselwort erscheinen. 2. Verwenden Sie einen eindeutigen Index. Die Indizierung funktioniert gut bei Spalten mit eindeutigen Werten, jedoch schlecht bei Spalten mit mehreren doppelten Werten. 3. Verwenden Sie kurze Indizes. Wenn Sie eine Zeichenfolgenspalte indizieren, sollten Sie nach Möglichkeit eine Präfixlänge angeben. 4. Verwenden Sie das Präfix ganz links. Wenn Sie einen n-Spalten-Index erstellen, erstellen Sie tatsächlich n Indizes, die MySQL verwenden kann. Ein mehrspaltiger Index kann als mehrere Indizes fungieren, da die äußerste linke Spaltengruppe im Index zum Abgleichen von Zeilen verwendet werden kann; eine solche Spaltengruppe wird zu einem äußersten linken Präfix. 5. Überindizieren Sie nicht. Indizes verschwenden Speicherplatz und verringern die Schreibleistung. 6. Berücksichtigen Sie die Arten der Vergleiche, die an den Spalten durchgeführt werden. Kapitel 6: Sperrmechanismus und Transaktionskontrolle Die InnoDB-Engine bietet Sperren auf Zeilenebene, unterstützt zwei Sperrmodi: gemeinsame Sperren und exklusive Sperren sowie vier verschiedene Isolationsebenen. MySQL unterstützt lokale Transaktionen durch Anweisungen wie AUTOCOMIT, START TRANSACTIONS, COMMIT und ROLLBACK. Kapitel 7: Sicherheitsprobleme in SQL SQL-Injection: Nutzt die externe Schnittstelle einiger Datenbanken, um Benutzerdaten in die eigentliche Datenbankbetriebssprache (SQL) einzufügen und so in die Datenbank oder sogar das Betriebssystem einzudringen. Der Hauptgrund ist, dass das Programm die vom Benutzer eingegebenen Daten nicht streng filtert, was zur Ausführung illegaler Datenbankabfrageanweisungen führt. Vorbeugende Maßnahmen:
Kapitel 8: SQL-Modus und damit verbundene Probleme Ändern Sie den standardmäßigen MySQL-Ausführungsmodus. Wenn beispielsweise ein Einfügen oder Aktualisieren im strikten Modus falsch ist, gibt MySQL einen Fehler aus und bricht den Vorgang ab. Kapitel 9: Allgemeine SQL-Kenntnisse
Kapitel 10: Weitere Punkte, die Aufmerksamkeit erfordern Groß-/Kleinschreibung von Datenbank- und Tabellennamen: Unterschiedliche Plattformen und Systeme berücksichtigen unterschiedliche Groß-/Kleinschreibung. Es wird empfohlen, Namen immer in Kleinbuchstaben zu verwenden. Kapitel 11: SQL-Optimierung Allgemeine Schritte zur Optimierung von SQL: 1. Verwenden Sie die Statusanzeige und die Anwendungsmerkmale, um die Ausführungshäufigkeit verschiedener SQL-Anweisungen und das ungefähre Ausführungsverhältnis verschiedener SQL-Anweisungen zu verstehen. Beispielsweise fragt der InnoDB-Parameter Innode_rows_read die Anzahl der zurückgegebenen Zeilen ab, Innodb_rows_inserted führt die Anzahl der durch Einfügen eingefügten Zeilen aus und Innodb_rows_updated führt die Anzahl der aktualisierten Zeilen aus. Darüber hinaus gibt es mehrere Parameter: Verbindungen: Verbindungsversuche mit dem MySQL-Server, Uptime-Server-Arbeitszeit, Slow_queries: Anzahl langsamer Abfragen. 2. Suchen Sie SQL-Anweisungen mit geringer Ausführungseffizienz. Es gibt zwei Möglichkeiten: Eine besteht darin, Anweisungen mit geringer Ausführungseffizienz über das langsame Abfrageprotokoll zu lokalisieren. Wenn mysqld mit der Option --log-slow-queries[=file_name] gestartet wird, schreibt es eine Protokolldatei mit allen SQL-Anweisungen, deren Ausführungszeit long_query_time Sekunden überschreitet. Die andere Möglichkeit besteht darin, mit „show processlist“ die aktuellen Threads in MySQL anzuzeigen, einschließlich des Thread-Status, ob die Tabelle gesperrt ist usw. Sie können den SQL-Ausführungsstatus in Echtzeit anzeigen und einige Tabellensperrvorgänge optimieren. 3. Analysieren Sie den Ausführungsplan von ineffizientem SQL mithilfe von EXPLAIN: EXPLAIN kann Ihnen sagen, wann Sie die Tabelle indizieren müssen, um ein schnelleres SELECT zu erhalten, das den Index zum Suchen von Datensätzen verwendet. Im Folgenden finden Sie eine Erklärung der Ergebnisse, die nach der Ausführung von EXPLAIN erzielt werden:
4. Identifizieren Sie das Problem und ergreifen Sie entsprechende Optimierungsmaßnahmen. Indizierungsprobleme
Zwei einfache und praktische Optimierungsmethoden
Optimierung aus der Sicht des Clients (Codeseite)
Kapitel 12: Optimieren von Datenbankobjekten Tabellendatentyp optimieren: Verbessern Sie die Effizienz des Tabellenzugriffs durch Aufteilen: Das Aufteilen hier gilt hauptsächlich für Tabellen vom Typ MyISAM.
Denormalisierung: Das Normalisierungsdesign betont die Unabhängigkeit und minimiert die Datenredundanz. Mehr Redundanz bedeutet, dass mehr physischer Speicherplatz belegt wird, und bringt auch Probleme bei der Datenwartung und Konsistenzprüfung mit sich. Durch entsprechende Redundanz können Sie den Zugriff auf mehrere Tabellen reduzieren und die Abfrageeffizienz deutlich verbessern. In diesem Fall können Sie eine Verbesserung der Effizienz durch entsprechende Redundanz in Betracht ziehen. Redundante Statistiktabellen verwenden: Verwenden Sie Wählen Sie einen geeigneteren Tabellentyp: 1. Wenn die Anwendung schwerwiegende Sperrkonflikte aufweist, überlegen Sie, ob Sie die Speicher-Engine absichtlich auf InnoDB umstellen sollten. Der Zeilensperrmechanismus kann das Auftreten von Sperrkonflikten wirksam reduzieren. 2. Wenn die Anwendung viele Abfragevorgänge hat und keine strengen Anforderungen an die Transaktionsintegrität stellt, können Sie die Verwendung von Myisam in Betracht ziehen. Kapitel 13: Sperrprobleme Warten auf Sperren: Statusvariablen „table_locks_waited“ und „table_locks_immediate“ zur Analyse von Tabellensperrenkonflikten im System. Überprüfen Sie Innode_row_lock, um Zeilensperrenkonflikte zu analysieren. Kapitel 14: Optimierung des MySQL-Servers Zeigen Sie die aktuellen Parameter des MySQL-Servers an
Wichtige Parameter, die die MySQL-Leistung beeinflussen
Kapitel 15: E/A-Probleme Suchvorgänge auf der Festplatte stellen einen enormen Leistungsengpass dar.
Kapitel 16: Anwendungsoptimierung
Zusammenfassen Das Obige ist der relevante Inhalt zu MySQL. Ich hoffe, dass der Inhalt dieses Artikels jedem beim Erlernen oder Verwenden von MySQL eine Hilfe sein kann. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Das könnte Sie auch interessieren:
|
<<: So handhaben Sie Bilder in Vue-Formularen
>>: Lösung für das Problem der langsamen Docker-Pull-Image-Geschwindigkeit
Hintergrund Ich habe mit meinen Klassenkameraden ...
Überblick Backup ist die Grundlage der Notfallwie...
Die Version Mysql5.7.19 ist eine neue Version, di...
1. MySQL herunterladen Klicken Sie auf die Downlo...
Bei der Verwendung von MySQL werden Daten im Allg...
Inhaltsverzeichnis 1. So finden und optimieren Si...
WeChat-Applet: Einfacher Rechner. Zu Ihrer Inform...
Kürzlich habe ich festgestellt, dass selbst wenn d...
1. Grundstruktur: Code kopieren Der Code lautet wi...
Inhaltsverzeichnis Vorwort 1. Vorbereitung - Serv...
Szenario Das Unternehmensprojekt wird in Docker b...
Vorwort Das Docker-Image kann nicht gelöscht werd...
1. Online-Installation Derzeit habe ich nur die O...
Installieren Filebeat hat Logstash-Forwarder voll...
Die Netzwerkkonfiguration des Host Only+NAT-Modus...