Inhaltsverzeichnis
Problem SQL beurteilen
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.
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.
Heim Datenbank MySQL-Tutorial Anhand von Beispielen erfahren Sie, wie Sie SQL optimieren

Anhand von Beispielen erfahren Sie, wie Sie SQL optimieren

Aug 04, 2021 am 09:26 AM
sql优化

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.
SQL-Anweisungsdarstellung

Anhand von Beispielen erfahren Sie, wie Sie SQL optimierenLang

  • Die Ausführungszeit ist zu lang.

    • Daten aus dem vollständigen Tabellenscan abrufen. Die Zeilen und Kosten im Ausführungsplan sind sehr groß

    • Lange SQL ist leicht zu verstehen. Wenn eine SQL zu lang ist, ist die Lesbarkeit schlecht und die Häufigkeit von Problemen ist definitiv höher. Um das SQL-Problem weiter zu beurteilen, müssen wir mit dem Ausführungsplan beginnen, wie unten gezeigt:
    • 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
    Verschiedene Datenbanken haben unterschiedliche Methoden, um es abzurufen. Im Folgenden finden Sie das SQL-Erfassungstool für langsame Abfragen für die aktuellen Mainstream-Datenbanken.

MySQL. Protokoll für langsame Abfragen

Anhand von Beispielen erfahren Sie, wie Sie SQL optimieren

Ptquery und andere Tools des Unternehmens

Oracle
  • 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

    • Vermeiden Sie das Schreiben von „select *“

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 „1=1“

• Vermeiden Sie die Schreibweise „order by rand()“

RAND(), die dazu führt, dass die Datenspalte mehrmals gescannt wird

SQL-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)

Als nächstes verwenden wir einen praktischen Optimierungsfall, um den SQL-Optimierungsprozess und die Optimierungstechniken zu erläutern. OptimierungsfallTabellenstruktur
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
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`)
);
Nach dem Login kopieren

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;
Nach dem Login kopieren

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 bAnhand von Beispielen erfahren Sie, wie Sie SQL optimieren

Verwenden Sie einen zusammengesetzten Index. Eliminieren Sie temporäre Tabellen und Sortierung.

Anhand von Beispielen erfahren Sie, wie Sie SQL optimieren

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`);
Nach dem Login kopieren

Sehen Sie sich die Ausführungszeit nach der Optimierung an Warninformationen anzeigen Anhand von Beispielen erfahren Sie, wie Sie SQL optimieren

Zusammenfassung


  1. Erklärung des Ausführungsplans anzeigen

  2. Wenn eine Alarmmeldung vorliegt, überprüfen Sie die Alarminformationen, zeigen Sie Warnungen an;

  3. Sehen Sie sich die Tabellenstruktur und Indexinformationen an, die in SQL enthalten sind

  4. Denken Sie über mögliche Optimierungspunkte gemäß nach Ausführungsplan

Führen Sie Tabellenstrukturänderungen durch, fügen Sie Indizes hinzu, schreiben Sie SQL neu usw. gemäß möglichen Optimierungspunkten. Vorgang

Anzeigen der optimierten Ausführungszeit und des Ausführungsplans

Anhand von Beispielen erfahren Sie, wie Sie SQL optimieren

Wenn der Optimierungseffekt nicht offensichtlich ist, wiederholen Sie den Vorgang der vierte Schritt

Anhand von Beispielen erfahren Sie, wie Sie SQL optimierenVerwandte Empfehlungen: „

MySQL-Tutorial


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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie kann die Leistung des Discuz-Forums optimiert werden? Wie kann die Leistung des Discuz-Forums optimiert werden? Mar 12, 2024 pm 06:48 PM

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 SQL Server und MySQL optimiert werden, damit sie ihre beste Leistung erbringen können? Wie kann die Leistung von SQL Server und MySQL optimiert werden, damit sie ihre beste Leistung erbringen können? Sep 11, 2023 pm 01:40 PM

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

Linux-Leistungsoptimierung ~ Linux-Leistungsoptimierung ~ Feb 12, 2024 pm 03:30 PM

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

Kernunterschiede zwischen Sybase- und Oracle-Datenbankverwaltungssystemen Kernunterschiede zwischen Sybase- und Oracle-Datenbankverwaltungssystemen Mar 08, 2024 pm 05:54 PM

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.

Was bedeutet irgendein in SQL? Was bedeutet irgendein in SQL? May 01, 2024 pm 11:03 PM

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

Leistungsoptimierung von SQL Server und MySQL: Best Practices und wichtige Tipps. Leistungsoptimierung von SQL Server und MySQL: Best Practices und wichtige Tipps. Sep 11, 2023 pm 12:46 PM

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

Ausführungsplan für MySQL-SQL-Anweisungen: So optimieren Sie den MySQL-Abfrageprozess Ausführungsplan für MySQL-SQL-Anweisungen: So optimieren Sie den MySQL-Abfrageprozess Jun 16, 2023 am 09:15 AM

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.

So erreichen Sie eine Low-Level-Optimierung von MySQL: Tipps und Best Practices für die erweiterte Optimierung von SQL-Anweisungen So erreichen Sie eine Low-Level-Optimierung von MySQL: Tipps und Best Practices für die erweiterte Optimierung von SQL-Anweisungen Nov 08, 2023 pm 04:32 PM

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.

See all articles