Mysql-Optimierungstool (empfohlen)

Mysql-Optimierungstool (empfohlen)

Vorwort

Als ich heute auf GitHub gestöbert habe, bin ich auf dieses automatisierte Tool namens Sora zum Optimieren und Neuschreiben von SQL gestoßen. Ich fand es ziemlich gut, also habe ich es heruntergeladen und studiert. Dieses Tool unterstützt viele Funktionen und kann als Hilfsmittel bei unserer täglichen Entwicklung verwendet werden. Jetzt empfehle ich es Ihnen ~~~

Github-Portal: https://github.com/XiaoMi/soar

Hintergrund

Bei unserer täglichen Entwicklung gehört die SQL-Optimierung immer zu unseren täglichen Entwicklungsaufgaben. Regelmäßige SQL-Optimierung kann nicht nur die Programmleistung verbessern, sondern auch die Wahrscheinlichkeit von Online-Fehlern verringern.

Zu den derzeit häufig verwendeten SQL-Optimierungsmethoden gehören unter anderem: Optimierung der Geschäftsebene, Optimierung der SQL-Logik, Indexoptimierung usw. Die Indexoptimierung erreicht das Ziel der SQL-Optimierung normalerweise durch Anpassen der Indizes oder Hinzufügen neuer Indizes. Durch Indexoptimierung können in kurzer Zeit oft enorme Ergebnisse erzielt werden. Wenn wir die Indexoptimierung in einen toolbasierten und standardisierten Prozess umwandeln und den Arbeitsaufwand manueller Eingriffe reduzieren können, wird dies unsere Arbeitseffizienz zweifellos erheblich verbessern.

SOAR (SQL Optimizer And Rewriter) ist ein automatisiertes Tool zum Optimieren und Neuschreiben von SQL. Entwickelt und gepflegt vom Datenbankteam der künstlichen Intelligenz und Cloud-Plattform von Xiaomi.

Der Vergleich mit anderen hervorragenden Produkten der Branche sieht wie folgt aus:

STEIGEN SQLCheck - Die SQL-Prüfung pt-Abfrageberater SQL-Berater Beginn sqlautoreview
Heuristische Vorschläge ✔️ ✔️ ✔️ ✔️ ✔️
Indexvorschläge ✔️ ✔️ ✔️
Abfrage neu schreiben ✔️
Ausführungsplananzeige ✔️
Profilerstellung ✔️
Verfolgen ✔️
SQL Online-Ausführung ✔️
Datensicherung ✔️

Wie aus der obigen Abbildung ersichtlich ist, gibt es viele unterstützte Funktionen und die Funktionsmerkmale lauten wie folgt:

  • Plattformübergreifende Unterstützung (unterstützt Linux- und Mac-Umgebungen und theoretisch auch Windows-Umgebungen, aber nicht vollständig getestet)
  • Unterstützt derzeit nur die SQL-Optimierung des MySQL-Syntaxfamilienprotokolls
  • Unterstützt Anweisungsoptimierung basierend auf heuristischen Algorithmen
  • Unterstützt mehrspaltige Indexoptimierung für komplexe Abfragen (UPDATE, INSERT, DELETE, SELECT)
  • Unterstützen Sie die informationsreiche Interpretation von EXPLAIN
  • Unterstützt SQL-Fingerprinting, Komprimierung und Verschönerung
  • Unterstützt das Zusammenführen mehrerer ALTER-Anfragen für dieselbe Tabelle
  • Unterstützt das SQL-Umschreiben benutzerdefinierter Regeln

Das ist alles, was ich zu sagen habe. Da es sich um ein SQL-Optimierungstool handelt, ist es sinnlos, nur darüber zu reden. Lassen Sie uns es zuerst verwenden und die Wirkung sehen.

Installieren

Es gibt zwei Möglichkeiten zur Installation:

Laden Sie das binäre Installationspaket herunter

$ wget https://github.com/XiaoMi/soar/releases/download/0.11.0/soar.linux-amd64 -O soar
chmod a+x steigen

Es wird empfohlen, direkt die neuste Version herunterzuladen, da es sonst zu Fehlern kommt.

Fügen Sie einfach die heruntergeladene Binärdatei zur Umgebungsvariable hinzu (wenn Sie nicht wissen, wie das geht, googeln Sie es, ich werde es hier nicht erklären).

Probieren Sie es aus:

$ echo 'select * from user' | soar.darwin-amd64 (geben Sie entsprechend Ihrem eigenen Binärdateinamen ein)
# Abfrage: AC4262B5AF150CB5
 
★ ★ ★ ☆ ☆ 75 Punkte ```sql
WÄHLEN
 *
AUS
 BENUTZER
```
 
## Äußerstes SELECT gibt keine WHERE-Bedingung an* **Artikel:** CLA.001
 
* **Schweregrad:** L4
 
* **Inhalt:** Die SELECT-Anweisung hat keine WHERE-Klausel und untersucht möglicherweise mehr Zeilen als erwartet (vollständiger Tabellenscan). Wenn bei Anforderungen vom Typ „SELECT COUNT(\*)“ keine Genauigkeit erforderlich ist, wird empfohlen, stattdessen „SHOW TABLE STATUS“ oder „EXPLAIN“ zu verwenden.
 
## Es wird nicht empfohlen, SELECT * Type query * **Item:** COL.001 zu verwenden.
 
* **Schweregrad:** L1
 
* **Inhalt:** Die Verwendung des Platzhalters \* zum Auswählen aller Spalten führt dazu, dass sich die Bedeutung und das Verhalten von Abfragen ändern, wenn sich die Tabellenstruktur ändert. Dies kann dazu führen, dass die Abfrage mehr Daten zurückgibt.

Quellinstallation

Abhängigkeiten:

1. Gehen Sie auf 1.10+
2. git

Erweiterte Abhängigkeiten (nur für Entwickler)

  • Die MySQL-Clientversion muss mit der MySQL-Version im Container übereinstimmen, um Verbindungsfehler aufgrund von Authentifizierungsgründen zu vermeiden.
  • Docker MySQL Server-Testcontainerverwaltung
  • Govendor Go-Paketverwaltung
  • retool setzt auf externes Tool zur statischen Codequalitätsprüfung und binäre Dateiverwaltung

Binärdateien erzeugen:

gehe zu -d github.com/XiaoMi/soar
cd ${GOPATH}/src/github.com/XiaoMi/soar und make
Die generierte Binärdatei ist dieselbe wie oben, fügen Sie sie einfach in die Umgebungsvariable ein. Ich habe es hier nicht ausprobiert, also müssen Sie es selbst herausfinden~~~

Einfach zu bedienen

0. Vorbereitende Maßnahmen

Bereiten Sie eine Tabelle wie folgt vor:

CREATE TABLE `Benutzer` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 `Benutzername` varchar(64) NOT NULL DEFAULT '',
 `Spitzname` varchar(255) DEFAULT '',
 `Passwort` varchar(256) NOT NULL DEFAULT '',
 `salt` varchar(48) NICHT NULL STANDARD '',
 `avatar` varchar(128) DEFAULT NULL,
 `uptime` datetime DEFAULT NULL,
 Primärschlüssel (`id`),
 EINZIGARTIGER SCHLÜSSEL `Benutzername` (`Benutzername`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4

1. SQL-Anweisung direkt eingeben (nicht ausführen)

$ echo "Wählen Sie * aus Benutzern aus" | soar.darwin-amd64
$ # Abfrage: 30AFCB1E1344BEBD
 
★ ★ ★ ☆ ☆ 75 Punkte ```sql
WÄHLEN
 *
AUS
 Benutzer
```
## Äußerstes SELECT gibt keine WHERE-Bedingung an* **Artikel:** CLA.001
 
* **Schweregrad:** L4
 
* **Inhalt:** Die SELECT-Anweisung hat keine WHERE-Klausel und untersucht möglicherweise mehr Zeilen als erwartet (vollständiger Tabellenscan). Wenn bei Anforderungen vom Typ „SELECT COUNT(\*)“ keine Genauigkeit erforderlich ist, wird empfohlen, stattdessen „SHOW TABLE STATUS“ oder „EXPLAIN“ zu verwenden.
 
## Es wird nicht empfohlen, SELECT * Type query * **Item:** COL.001 zu verwenden.
 
* **Schweregrad:** L1
 
* **Inhalt:** Die Verwendung des Platzhalters \* zum Auswählen aller Spalten führt dazu, dass sich die Bedeutung und das Verhalten von Abfragen ändern, wenn sich die Tabellenstruktur ändert. Dies kann dazu führen, dass die Abfrage mehr Daten zurückgibt.

Da keine Verbindung zu MySQL besteht, erfolgt die Analyse jetzt vollständig auf Basis von SQL-Anweisungen. Wie Sie sehen, ist der ausgegebene Bericht zwar auch sehr detailliert, aber es handelt sich nur um eine leere Hülle. Die Analyse, die nur durch SQL-Anweisungen bereitgestellt wird, ist nicht genau, daher beginnen wir mit der nächsten Anwendung.

2. Stellen Sie eine Verbindung zu MySQL her, um einen EXPLAIN-Analysebericht zu generieren

Wir können MySQL-bezogene Konfigurationen in der Konfigurationsdatei wie folgt vornehmen:

vi soar.yaml
# Konfigurationsdatei im YAML-Format
Online-DSN:
  Adresse: 127.0.0.1:3306
  Schema: Asong
  Benutzer: root
  Passwort: root1997
  deaktivieren: false
 
Test-DSN:
  Adresse: 127.0.0.1:3306
  Schema: Asong
  Benutzer: root
  Passwort: root1997
  deaktivieren: false

Nachdem die Konfiguration nun abgeschlossen ist, setzen wir sie in die Praxis um:

$ echo "SELECT id,Benutzername,Spitzname,Passwort,Salt,Avatar,Uptime FROM users WHERE username = 'asong1111'" | soar.darwin-amd64 -test-dsn="root:[email protected]:3306/asong" -allow-online-as-test -log-output=soar.log
$ # Abfrage: D12A420193AD1674
 
★ ★ ★ ★ ★ 100 Punkte ```sql
WÄHLEN
 ID, Benutzername, Spitzname, PASSWORT, Salt, Avatar, Betriebszeit
AUS
 Benutzer
WO
 Benutzername = "asong1111"
```
 
## Informationen erklären | ID | Auswahltyp | Tabelle | Partitionen | Typ | mögliche Schlüssel | Schlüssellänge | Ref | Zeilen | gefiltert | Skalierbarkeit | Extra |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | SIMPLE | *Benutzer* | NULL | const | Benutzername | Benutzername | 258 | const | 1 | ☠️ **100,00 %** | ☠️ **O(n)** | NULL |
 
### Interpretation der Informationen erklären#### Interpretation der SelectType-Informationen* **SIMPLE**: Einfaches SELECT (verwendet keine UNION oder Unterabfrage usw.).
 
#### Interpretation der Typinformationen* **const**: const wird verwendet, um PRIMARY KEY mit konstanten Werten zu vergleichen. Wenn die Abfragetabelle nur eine Zeile hat, verwenden Sie system. Beispiel: SELECT * FROM tbl WHERE col = 1.

Dieses Mal enthalten die Ergebnisse einen EXPLAIN-Informationsanalysebericht. Dies ist anfängerfreundlich, da wir mit den von Explain analysierten Feldern nicht vertraut sind. Damit können wir die Probleme in SQL perfekt analysieren, ist das nicht großartig?

3. Grammatikprüfung

Das Soar-Tool kann nicht nur SQL-Anweisungen analysieren, sondern auch die SQL-Syntax überprüfen, um Probleme zu finden. Schauen wir uns ein Beispiel an:

$ echo "selec * von Benutzern" | soar.darwin-amd64 -only-Syntax-Check
Bei SQL 1: Zeile 1 Spalte 5 in der Nähe von „selec * from users“ (Gesamtlänge 18)

Hier fehlt im Schlüsselwort „select“ ein „t“. Durch Ausführen dieses Befehls können wir das Problem sofort lokalisieren. Wenn unsere SQL-Anweisung sehr lang ist, können wir mit diesem Befehl überprüfen, ob die SQL-Anweisung korrekt ist.

4. SQL-Verschönerung

Bei unserer täglichen Entwicklung schauen wir uns oft den Code an, den andere geschrieben haben. Aufgrund der verschiedenen Ebenen sind einige SQL-Anweisungen sehr chaotisch geschrieben, daher ist dieses Tool praktisch. Wir können unsere SQL-Anweisungen schöner und für uns leichter verständlich gestalten.

$ echo "SELECT id,Benutzername,Spitzname,Passwort,Salt,Avatar,Uptime FROM users WHERE username = 'asong1111'" | soar.darwin-amd64 -report-type=pretty
 
WÄHLEN
 ID, Benutzername, Spitzname, PASSWORT, Salt, Avatar, Betriebszeit
AUS
 Benutzer
WO
 Benutzername = "asong1111";

Ist das nicht intuitiver?

Abschluss

Da ich gerade erst mit der Verwendung dieses Tools begonnen habe, habe ich noch keine weiteren Spielmöglichkeiten dafür entdeckt und werde später weitere hinzufügen. Sie können das Gameplay selbst weiter studieren, GitHub-Portal: https://github.com/XiaoMi/soar. Die offizielle Dokumentation ist eigentlich sehr grob und Sie müssen sich auf Ihre eigene Recherche verlassen, um weitere Methoden freizuschalten. Schließlich wurde uns der Quellcode gegeben und er ist auch hilfreich, um Go zu lernen. Wäre es nicht besser, es als kleines Projekt zu behandeln und es langsam zu optimieren?

Dies ist das Ende dieses Artikels über das MySQL-Optimierungstool (empfohlen). Weitere relevante Inhalte zur MySQL-Optimierung finden Sie in den vorherigen 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:
  • Teilen Sie die 20 besten Erfahrungen zur MySQL-Leistungsoptimierung
  • Detaillierte Erläuterung der Verwendung und Optimierung von MySQL Order by-Anweisungen
  • 10 Konfigurationen, die Sie zur MySQL-Optimierung anpassen müssen
  • Analyse der max_connections-Konfigurationsparameter zur MySQL-Leistungsoptimierung
  • MySQL fragt den aktuellsten Datensatz der SQL-Anweisung ab (Optimierung)
  • 8 Möglichkeiten zur Optimierung der MySQL-Datenbank
  • Gängige Methoden zur MySQL-Optimierung
  • MySQL-Leistungsoptimierungs-Sharing (Sharding von Datenbanken und Tabellen)

<<:  Lösung für den Fehler bei der Verbindung mit MySQL in Docker

>>:  Detaillierte Erklärung des Unterschieds zwischen JavaScript onclick und click

Artikel empfehlen

Vue implementiert Beispielcode für Links- und Rechtsgleiteffekte

Vorwort Die bei der persönlichen tatsächlichen En...

Semantisierung von HTML-Tags (einschließlich H5)

einführen HTML stellt die kontextuelle Struktur u...

Ein kurzer Vortrag über das Klonen von JavaScript

Inhaltsverzeichnis 1. Oberflächliches Klonen 2. T...

Detaillierte Analyse klassischer Fragen zu JavaScript-Rekursionsfällen

Inhaltsverzeichnis Was ist Rekursion und wie funk...

Der beste Weg, um den 1px-Rand auf Mobilgeräten zu lösen (empfohlen)

Bei der Entwicklung für Mobilgeräte tritt häufig ...

Docker nginx implementiert einen Host zum Bereitstellen mehrerer Sites

Die virtuelle Maschine, die ich von einer bestimm...

Der Unterschied zwischen Datenzeit und Zeitstempel in MySQL

In MySQL gibt es drei Datumstypen: Datum (Jahr-Mo...

Gutes Website-Copywriting und gute Benutzererfahrung

Das Betrachten einer Website ist eigentlich wie di...