Anhand von Beispielen erfahren Sie, wie Sie SQL optimieren
Obwohl die Hardwarekosten heutzutage gesunken sind, ist die Verbesserung der Systemleistung durch ein Upgrade der Hardware auch eine gängige Optimierungsmethode. Systeme mit hohen Echtzeitanforderungen müssen noch unter SQL-Gesichtspunkten optimiert werden. Heute stellen wir anhand von Beispielen vor, wie man SQL optimiert.
Problem SQL beurteilen
Sie können anhand von zwei Symptomen beurteilen, ob ein Problem mit SQL vorliegt:
-
Symptome auf Systemebene
Der CPU-Verbrauch ist schwerwiegend. IO-Warten ist schwerwiegend. Die Seite Die Antwortzeit ist zu lang. Wenn das Protokoll einer langen
Anwendung eine Zeitüberschreitung und andere Fehler
- aufweist, können Sie den Befehl sar und den Befehl top verwenden, um den aktuellen Systemstatus anzuzeigen. Sie können den Systemstatus auch über Überwachungstools wie Prometheus und Grafana beobachten.
Lang
-
Die Ausführungszeit ist zu lang.
-
Daten aus dem vollständigen Tabellenscan abrufen. Die Zeilen und Kosten im Ausführungsplan sind sehr groß
- Der Ausführungsplan sagt uns, dass diese Abfrage einen vollständigen Tabellenscan Typ=ALL verwendet und die Zeilen sehr groß sind (9950400 ). Wir können grundsätzlich davon ausgehen, dass es sich hierbei um einen geschmackvollen SQL-Absatz handelt. Problem-SQL abrufen
-
-
AWR-Bericht
- Testtool Loadrunner usw.
- Verwandte interne Ansichten wie v$, $session _warte usw.
- GRID CONTROL-Überwachungstool
-
Dameng-Datenbank
- AWR-Bericht
- Testtool Loadrunner usw.
- Dameng-Leistungsüberwachungstool (dem)
- Verwandte interne Ansichten wie z B. v$, $session_wait usw.
-
SQL-Schreibfähigkeiten
- Es gibt mehrere allgemeine Fähigkeiten beim SQL-Schreiben: • Verwenden Sie Indizes rational
Bei weniger Indizes werden Abfragen langsamer; Nehmen Sie mehr Platz ein und Sie müssen den Index dynamisch verwalten, wenn Sie Hinzufügungen, Löschungen und Änderungen ausführen. Die Auswahlrate ist hoch (weniger doppelte Werte) und wird häufig von den B-Tree-Indizes benötigt
Im Allgemeinen müssen bei der Erstellung eines zusammengesetzten Index Volltextindizes verwendet werden Achten Sie auf Abfragen, die auf nicht führenden Spalten basieren- • Verwenden Sie UNION ALL anstelle von UNION
UNION ALL hat eine höhere Ausführungseffizienz als UNION, und UNION muss bei der Ausführung dedupliziert werden. UNION muss Daten sortieren
Beim Ausführen von SQL muss der Optimierer * in bestimmte Spalten konvertieren, und jede Abfrage muss an die Tabelle zurückgegeben werden. Abdeckindizes können nicht verwendet werden.
• Es wird empfohlen, JOIN-Felder zu indizieren.Im Allgemeinen werden JOIN-Felder im Voraus indiziert.• Vermeiden Sie komplexe SQL-Anweisungen.
Verbessern Sie die Lesbarkeit. Vermeiden Sie die Wahrscheinlichkeit langsamer Abfragen , Verarbeiten Sie es mit der geschäftlichen Seite
• Vermeiden Sie die Schreibweise „order by rand()“• Vermeiden Sie die Schreibweise „1=1“
RAND(), die dazu führt, dass die Datenspalte mehrmals gescannt wirdSQL-Optimierung Ausführungsplan
Abgeschlossen Bei der Optimierung von SQL müssen Sie zunächst den Ausführungsplan lesen. Der Ausführungsplan zeigt Ihnen, wo die Effizienz gering ist und wo eine Optimierung erforderlich ist. Nehmen wir MYSQL als Beispiel, um zu sehen, wie der Ausführungsplan aussieht. (Der Ausführungsplan jeder Datenbank ist unterschiedlich, Sie müssen ihn selbst verstehen)
Feld | Erläuterung |
---|---|
ID | Jede unabhängig ausgeführte Vorgangsidentifikation identifiziert die Reihenfolge, in der das Objekt ausgeführt wird. Je größer der ID-Wert, desto größer ist der Wert, der zuerst ausgeführt wird. Die Ausführungsreihenfolge ist von oben nach unten. Unten |
select_type | Der Typ jeder Select-Klausel in der Abfrage |
table | Der Name des Objekts, an dem gearbeitet wird, normalerweise der Tabellenname, aber es gibt auch andere Formate |
Partitionen | Die passenden Partitionsinformationen (Für nicht partitionierte Tabellen ist der Wert NULL) |
Typ | Typ der Join-Operation |
mögliche_Schlüssel | mögliche Indizes |
Schlüssel | Der tatsächlich vom Optimierer verwendete Index (die wichtigste Spalte). Die Join-Typen vom besten zum schlechtesten sind const, eq_reg, ref, range, index und ALL. Wenn ALL angezeigt wird, bedeutet dies, dass das aktuelle SQL einen „schlechten Geruch“ hat. |
key_len | Die Länge des vom Optimierer ausgewählten Indexschlüssels, die Einheit ist Bytes Das betriebene Objekt in dieser Zeile, das Nicht-Referenzobjekt ist NULL |
rows | Die Anzahl der von der Abfrageausführung gescannten Tupel (für Innodb ist dieser Wert eine Schätzung) |
gefiltert | Die Anzahl der Tupel in der Bedingungstabelle, in der die Daten gefiltert werden Prozent |
extra | Wichtige Zusatzinformationen des Ausführungsplans. Seien Sie vorsichtig, wenn in dieser Spalte die Wörter „Filesort verwenden“ und „Temporär verwenden“ angezeigt werden. Es ist sehr wahrscheinlich, dass die SQL-Anweisung dies tun muss optimiert werden |
Als nächstes verwenden wir einen praktischen Optimierungsfall, um den SQL-Optimierungsprozess und die Optimierungstechniken zu erläutern. | Optimierungsfall |
CREATE TABLE `a` ( `id` int(11) NOT NULLAUTO_INCREMENT, `seller_id` bigint(20) DEFAULT NULL, `seller_name` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `b` ( `id` int(11) NOT NULLAUTO_INCREMENT, `seller_name` varchar(100) DEFAULT NULL, `user_id` varchar(50) DEFAULT NULL, `user_name` varchar(100) DEFAULT NULL, `sales` bigint(20) DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `c` ( `id` int(11) NOT NULLAUTO_INCREMENT, `user_id` varchar(50) DEFAULT NULL, `order_id` varchar(100) DEFAULT NULL, `state` bigint(20) DEFAULT NULL, `gmt_create` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`) );
Drei Tabellen beziehen sich darauf, den Bestellstatus des aktuellen Benutzers 10 Stunden vor und nach der aktuellen Zeit abzufragen und sie in aufsteigender Reihenfolge entsprechend der Auftragserstellungszeit zu sortieren wie folgt
select a.seller_id, a.seller_name, b.user_name, c.state from a, b, c where a.seller_name = b.seller_name and b.user_id = c.user_id and c.user_id = 17 and a.gmt_create BETWEEN DATE_ADD(NOW(), INTERVAL – 600 MINUTE) AND DATE_ADD(NOW(), INTERVAL 600 MINUTE) order by a.gmt_create;
Sehen Sie sich das Datenvolumen an konsequent sein mit der Tabellenstruktur. Die user_id in der Tabelle ist vom Typ varchar(50) Der verwendete int-Typ hat eine implizite Konvertierung und es wird kein Index hinzugefügt. Ändern Sie das Feld user_id in den Tabellen b und c in den Typ int.
Da zwischen Tabelle b und Tabelle c eine Zuordnung besteht, erstellen Sie einen Index für die Benutzer-ID von Tabelle b und Tabelle c.
Da zwischen Tabelle a und Tabelle b eine Zuordnung besteht, erstellen Sie einen Index für den Verkäufernamen Feld von Tabelle a und b
Optimieren Sie zunächst SQL.
alter table b modify `user_id` int(10) DEFAULT NULL; alter table c modify `user_id` int(10) DEFAULT NULL; alter table c add index `idx_user_id`(`user_id`); alter table b add index `idx_user_id_sell_name`(`user_id`,`seller_name`); alter table a add index `idx_sellname_gmt_sellid`(`gmt_create`,`seller_name`,`seller_id`);
Sehen Sie sich die Ausführungszeit nach der Optimierung an Warninformationen anzeigen
- Erklärung des Ausführungsplans anzeigen
- Wenn eine Alarmmeldung vorliegt, überprüfen Sie die Alarminformationen, zeigen Sie Warnungen an;
- Sehen Sie sich die Tabellenstruktur und Indexinformationen an, die in SQL enthalten sind
- Denken Sie über mögliche Optimierungspunkte gemäß nach Ausführungsplan
Wenn der Optimierungseffekt nicht offensichtlich ist, wiederholen Sie den Vorgang der vierte Schritt
Verwandte Empfehlungen: „
“
Das obige ist der detaillierte Inhalt vonAnhand von Beispielen erfahren Sie, wie Sie SQL optimieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Wie kann die Leistung des Discuz-Forums optimiert werden? Einleitung: Discuz ist ein häufig verwendetes Forensystem, bei dessen Verwendung es jedoch zu Leistungsengpässen kommen kann. Um die Leistung von Discuz Forum zu verbessern, können wir es in vielerlei Hinsicht optimieren, einschließlich Datenbankoptimierung, Cache-Einstellungen, Codeanpassung usw. Im Folgenden wird erläutert, wie Sie die Leistung des Discuz-Forums mithilfe spezifischer Vorgänge und Codebeispiele optimieren können. 1. Datenbankoptimierung: Indexoptimierung: Durch das Erstellen von Indizes für häufig verwendete Abfragefelder kann die Abfragegeschwindigkeit erheblich verbessert werden. Zum Beispiel

Wie kann die Leistung von SQLServer und MySQL optimiert werden, damit sie ihre beste Leistung erbringen können? Zusammenfassung: In heutigen Datenbankanwendungen sind SQLServer und MySQL die beiden häufigsten und beliebtesten relationalen Datenbankverwaltungssysteme (RDBMS). Da die Datenmenge zunimmt und sich die Geschäftsanforderungen ständig ändern, ist die Optimierung der Datenbankleistung besonders wichtig geworden. In diesem Artikel werden einige gängige Methoden und Techniken zur Optimierung der Leistung von SQLServer und MySQL vorgestellt, damit Benutzer die Vorteile nutzen können

Das Linux-Betriebssystem ist ein Open-Source-Produkt und gleichzeitig eine Übungs- und Anwendungsplattform für Open-Source-Software. Unter dieser Plattform gibt es unzählige Open-Source-Softwareunterstützungen wie Apache, Tomcat, MySQL, PHP usw. Das größte Konzept von Open-Source-Software ist Freiheit und Offenheit. Als Open-Source-Plattform ist es daher das Ziel von Linux, durch die Unterstützung dieser Open-Source-Software eine optimale Anwendungsleistung zu niedrigsten Kosten zu erreichen. Bei Leistungsproblemen wird vor allem die beste Kombination aus Linux-Betriebssystem und Anwendungen erreicht. 1. Überblick über Leistungsprobleme Die Systemleistung bezieht sich auf die Effektivität, Stabilität und Reaktionsgeschwindigkeit des Betriebssystems bei der Erledigung von Aufgaben. Linux-Systemadministratoren können häufig auf Probleme wie Systeminstabilität und langsame Reaktionsgeschwindigkeit stoßen, z

Die Kernunterschiede zwischen Sybase- und Oracle-Datenbankverwaltungssystemen erfordern spezifische Codebeispiele. Datenbankverwaltungssysteme spielen im Bereich der modernen Informationstechnologie eine wichtige Rolle, da zwei bekannte relationale Datenbankverwaltungssysteme eine wichtige Rolle einnehmen Datenbankfeld. Obwohl es sich bei beiden um relationale Datenbankverwaltungssysteme handelt, gibt es einige wesentliche Unterschiede in der praktischen Anwendung. In diesem Artikel werden Sybase und Oracle aus verschiedenen Perspektiven verglichen, einschließlich Architektur, Syntax, Leistung usw.

Das Schlüsselwort ANY in SQL wird verwendet, um zu überprüfen, ob eine Unterabfrage Zeilen zurückgibt, die eine bestimmte Bedingung erfüllen: Syntax: ANY (Unterabfrage) Verwendung: Wird mit Vergleichsoperatoren verwendet. Wenn die Unterabfrage Zeilen zurückgibt, die die Bedingung erfüllen, wird der ANY-Ausdruck als ausgewertet true Vorteile: vereinfacht Abfragen, verbessert die Effizienz und eignet sich für die Verarbeitung großer Datenmengen. Einschränkungen: stellt keine bestimmten Zeilen bereit, die die Bedingung erfüllen. Wenn die Unterabfrage mehrere Zeilen zurückgibt, die die Bedingung erfüllen, wird nur true zurückgegeben

SQLServer- und MySQL-Leistungsoptimierung: Best Practices und wichtige Tipps Zusammenfassung: In diesem Artikel werden die Leistungsoptimierungsmethoden zweier gängiger relationaler Datenbanksysteme, SQLServer und MySQL, vorgestellt und einige Best Practices und wichtige Tipps bereitgestellt, die Entwicklern und Datenbankadministratoren dabei helfen, die Leistung und Leistung zu verbessern Effizienz von Datenbanksystemen. Einleitung: In der modernen Anwendungsentwicklung sind Datenbanksysteme ein unverzichtbarer Bestandteil. Da die Datenmenge zunimmt und die Anforderungen der Benutzer steigen, wird die Optimierung der Datenbankleistung besonders wichtig. Quadrat

Mit der rasanten Entwicklung des Internets wird die Speicherung und Verarbeitung von Daten immer wichtiger. Daher sind relationale Datenbanken ein integraler Bestandteil moderner Softwareplattformen. Die MySQL-Datenbank hat sich zu einer der beliebtesten relationalen Datenbanken entwickelt, da sie einfach zu verwenden, einfach bereitzustellen und zu verwalten ist. Bei der Verarbeitung großer Datenmengen treten jedoch häufig Leistungsprobleme bei MySQL-Datenbanken auf. In diesem Artikel befassen wir uns mit dem SQL-Anweisungsausführungsplan von MySQL und stellen vor, wie MySQL-Daten durch Optimierung des Abfrageprozesses verbessert werden können.

MySQL ist ein weit verbreitetes relationales Datenbankverwaltungssystem, das häufig für die Entwicklung von Webanwendungen und die Datenspeicherung verwendet wird. In praktischen Anwendungen ist die zugrunde liegende Optimierung von MySQL besonders wichtig, wobei die erweiterte Optimierung von SQL-Anweisungen der Schlüssel zur Verbesserung der Datenbankleistung ist. In diesem Artikel werden einige Tipps und Best Practices für die Implementierung der zugrunde liegenden Optimierung von MySQL sowie spezifische Codebeispiele vorgestellt. Bestimmen Sie die Abfragebedingungen. Beim Schreiben von SQL-Anweisungen müssen Sie zunächst die Abfragebedingungen klar definieren und die Verwendung unbegrenzter Platzhalterabfragen vermeiden, d. h. die Verwendung von „%“ zum Öffnen der Abfrage vermeiden.
