Heim Datenbank SQL Wie optimiert man SQL-Abfragen? (ausführliche Erklärung)

Wie optimiert man SQL-Abfragen? (ausführliche Erklärung)

Nov 30, 2019 pm 05:54 PM
sql查询

Wie optimiert man SQL-Abfragen? (ausführliche Erklärung)

Warum sollten wir optimieren

Der Durchsatzengpass des Systems zeigt sich oft in der Zugriffsgeschwindigkeit der Datenbank, Das heißt, während die Anwendung ausgeführt wird, befinden sich immer mehr Daten in der Datenbank und die Verarbeitungszeit verlangsamt sich entsprechend. Darüber hinaus werden die Daten auf der Festplatte gespeichert und die Lese- und Schreibgeschwindigkeit ist nicht vergleichbar das des Speichers.

Wie wäre es mit der Optimierung

1. Beim Entwurf der Datenbank: Entwurf von Datenbanktabellen und -feldern, Speicher-Engine

2. Nutzen Sie die von MySQL selbst bereitgestellten Funktionen wie Indizes und Optimierung des Anweisungsschreibens

3. MySQL-Cluster, Unterdatenbank und Untertabelle, Lese-/Schreibtrennung

Das Internet hat viel Erfahrung in der Optimierung von SQL-Anweisungen, daher legt dieser Artikel diese beiseite und versucht, die DAO-Schicht und die Optimierung des Datenbankdesigns zu optimieren und zwei einfache Beispiele aufzulisten

Beispiel 1: ERP Abfrageoptimierung

Aktuelle Situationsanalyse:

1. Fehlende zugehörige Indizes
2. MySQL selbst hat eine begrenzte Leistung und unterstützt die Zuordnung mehrerer Tabellen nicht gut . Die aktuelle Leistung konzentriert sich hauptsächlich auf Listenabfragen, die viele Tabellen verknüpfen

Gegenmaßnahmen:

1 Erforderliche Indizes hinzufügen: Zeigen Sie die Ausführungsdatensätze über EXPLAIN an und fügen Sie Indizes entsprechend hinzu Ausführungsplan;
2 Zählen Sie zuerst die Primärschlüssel der Haupttabelle der Geschäftsdaten, erhalten Sie eine kleinere Ergebnismenge und verwenden Sie dann die mit der Ergebnismenge verknüpfte Abfrage.
1) Fragen Sie zuerst den Primärschlüssel ab und zeigen Sie ihn an Geschäftsdaten basierend auf der Haupttabelle und den Bedingungen
2) Verwenden Sie den Primärschlüssel als Abfragebedingung und verknüpfen Sie dann andere verwandte Tabellen, um die erforderlichen Geschäftsfelder abzufragen
3 ) Beim Abfragen der Haupttabelle für Abfragebedingungen das mit anderen Tabellen verknüpft werden müssen, müssen Sie die Tabellenzuordnung nur dann einrichten, wenn Sie diese Bedingung festlegen

例如 有如下表 TT_A   TT_B    TT_C  TT_D

假设未优化前的SQL是这样的

SELECT
    A.ID,
    ....
    B.NAME,
    .....
    C.AGE,
    ....
    D.SEX
    .....

FROM  TT_A A
LEFT JOIN TT_B B ON A.ID  = B.ITEM_ID
LEFT JOIN TT_C C ON B.ID = C.ITEM_ID
LEFT JOIN TT_D D ON C.ID = D.ITEM_ID
WHERE 1=1AND A.XX = ?AND A.VV = ?.....

那么优化后的SQL是

第一步

SELECT
    A.ID

FROM  TT_A A
WHERE 1=1AND A.XX = ?AND A.VV = ?第二步

SELECT
    A.ID,
    ....
    B.NAME,
    .....
    C.AGE,
    ....
    D.SEX
    .....
FROM  ( SELECT A.ID,..... FROM  TT_A  WHERE ID IN (1,2,3..)  ) A
LEFT JOIN TT_B B ON A.ID  = B.ITEM_ID
LEFT JOIN TT_C C ON B.ID = C.ITEM_ID
LEFT JOIN TT_D D ON C.ID = D.ITEM_ID
WHERE 1=1AND A.XX = ?AND A.VV = ?
Nach dem Login kopieren

Zusammenfassung:

Diese Art der Optimierung ist Geeignet für Listenabfragen, da die Bedingungen einer Listenabfrage im Allgemeinen mit der Haupttabelle verknüpft sind. Verwenden Sie diese Funktion daher zum Erstellen von Schlüsselfeldindizes und reduzieren Sie gleichzeitig die Haupttabelle durch die Einschränkung der Abfragebedingungen erheblich. Auf diese Weise können andere Tabellen viel schneller verknüpft werden

Beispiel 2: Optimierung der Artikelsuche

Angenommen, Sie möchten eine Artikelsuchfunktion für Tieba erstellen Der einfachste und direkteste Weg Die Speicherstruktur besteht darin, eine relationale Datenbank zu verwenden, um eine solche relationale Datenbanktabelle TT_ARTICLES zum Speichern von Artikeln zu erstellen:

Wenn dann das aktuelle Suchschlüsselwort „ target“, können wir den String-Matching verwenden, um passende Abfragen für die Spalte CONTENT durchzuführen:

select * from ARTICLES where CONTENT like '% 目标 %';
Nach dem Login kopieren

Dadurch wird die Suchfunktion einfach implementiert. Dieser Ansatz weist jedoch offensichtliche Probleme auf, das heißt, die Verwendung von % für den Zeichenfolgenabgleich ist sehr ineffizient, sodass eine solche Abfrage die gesamte Tabelle durchlaufen muss (vollständiger Tabellenscan). Bei wenigen oder Dutzenden Artikeln ist das kein Problem, bei Hunderttausenden oder Millionen Artikeln ist diese Methode jedoch völlig undurchführbar. Ganz zu schweigen davon, dass eine einzelne relationale Datenbanktabelle nicht so große Datenmengen aufnehmen kann, der Zeitaufwand ist hier unvorstellbar, wenn sie gescannt werden muss

Also müssen wir „einführen“. Inversion"-"Indizierungs"-Technologie. Im oben beschriebenen Szenario können wir dieses Konzept zur Erläuterung in zwei Teile aufteilen: Okay, die obige ARTICLES-Tabelle existiert noch, aber jetzt muss eine Schlüsselworttabelle KEYWORDS hinzugefügt werden und die KEYWORD-Spalte muss daher indiziert werden Dieses Schlüsselwort kann schnell gefunden werden:

Natürlich benötigen wir auch eine Beziehungstabelle, um die KEYWORDS-Tabelle und die ARTICLES-Tabelle, KEYWORD_ID und ARTICLE_ID als Unions-Primärschlüssel

Sie sehen, es handelt sich tatsächlich um eine Viele-zu-Viele-Beziehung, das heißt, dasselbe Schlüsselwort kann in mehreren Artikeln vorkommen und ein Artikel kann mehrere verschiedene Schlüsselwörter enthalten. Auf diese Weise können wir zuerst die entsprechende KEYWORD_ID aus der Tabelle KEYWARDS basierend auf den indizierten Schlüsselwörtern finden, dann die ARTICLE_ID basierend auf der obigen Zuordnungstabelle finden und sie dann verwenden, um den entsprechenden Artikel in der Tabelle ARTICLES zu finden.

Zusammenfassung:

Dies scheint drei Suchvorgänge zu sein, aber da der Index jedes Mal verwendet wird, entfällt ein vollständiger Tabellenscan, wenn die Datenmenge gering ist , Die Geschwindigkeit ist nicht langsam und bei der Implementierung mit SQL kann dieser Prozess vollständig in eine SQL-Anweisung eingefügt werden. Wenn die Datenmenge klein ist, ist die obige Methode ausreichend. Dadurch werden die Leistungsprobleme gelöst, die durch vollständige Tabellenscans und String-%-Match-Abfragen verursacht werden.

Zusammenfassung:

Wenn Sie während des technischen Interviews praktische Beispiele geben oder direkt über die Probleme und Vorteile in Ihrem Entwicklungsprozess sprechen können, wird der Interviewzweig verwendet Fügen Sie viel hinzu, und Ihre Antworten sollten logischer sein. Gehen Sie nicht hier und da vor, was Sie leicht verwirren kann. Wenn Sie beispielsweise gefragt werden, wie Sie SQL optimieren können, sollten Sie nicht direkt mit dem Hinzufügen von Indizes antworten. Sie können wie folgt antworten:

Hallo Interviewer, zunächst einmal ist unser Projekt-DB-Datenvolumen auf einen Engpass gestoßen, der dazu führt, dass die Listenabfrage sehr langsam ist und den Benutzern ein schlechtes Erlebnis beschert. Um dieses Problem zu lösen, gibt es viele Methoden, wie zum Beispiel die meisten Grundlegendes Datenbanktabellendesign. Grundlegende SQL-Optimierung, MYSQL-Clustering, Lese-/Schreibtrennung, Unterdatenbanken und Untertabellen, Hinzufügen von Cache-Ebenen zur Architektur usw. Ihre Vor- und Nachteile ... Wir kombinieren diese und kombinieren sie dann mit dem Merkmale unseres Projekts Schließlich entscheiden wir bei der Auswahl der Technologie.

Wenn Sie die Fragen so geordnet und fundiert beantworten und auch über so viele Wissenspunkte außerhalb der Fragen sprechen, wird der Interviewer denken, dass Sie nicht nur eine Person sind, die Code schreiben kann, sondern dass Sie haben eine klare Logik. Sie haben Ihr eigenes Verständnis und Denken über die Technologieauswahl

Dieser Artikel stammt aus der Rubrik SQL-Tutorial, willkommen zum Lernen!

Das obige ist der detaillierte Inhalt vonWie optimiert man SQL-Abfragen? (ausführliche Erklärung). 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)

Meituan-Interviewfrage: Sind Sie jemals auf langsames SQL gestoßen? Wie wurde es gelöst? Meituan-Interviewfrage: Sind Sie jemals auf langsames SQL gestoßen? Wie wurde es gelöst? Aug 24, 2023 pm 03:41 PM

Das langsame Abfrageprotokoll von MySQL ist ein von MySQL bereitgestellter Protokolldatensatz, der zum Aufzeichnen von Anweisungen in MySQL verwendet wird, deren Abfragezeit den festgelegten Schwellenwert (long_query_time) überschreitet, und sie im langsamen Abfrageprotokoll aufzeichnet.

PHP und PDO: So führen Sie komplexe SQL-Abfragen aus PHP und PDO: So führen Sie komplexe SQL-Abfragen aus Jul 28, 2023 pm 03:43 PM

PHP und PDO: So führen Sie komplexe SQL-Abfrageanweisungen aus. Bei der Verarbeitung von Datenbankoperationen stellt PHP eine leistungsstarke Erweiterungsbibliothek PDO (PHPDataObjects) zur Verfügung, um die Interaktion mit der Datenbank zu vereinfachen. PDO unterstützt eine Vielzahl von Datenbanken wie MySQL, SQLite usw. und bietet außerdem eine Fülle von Funktionen und Methoden, um Entwicklern die Durchführung verschiedener Datenbankoperationen zu erleichtern. In diesem Artikel wird die Verwendung von PDO zum Ausführen komplexer SQL-Abfrageanweisungen vorgestellt und entsprechende Codebeispiele angehängt. Stellen Sie eine Verbindung zur Datenbank her

Was sind die häufigsten Tabellenoperationen in der PHP-Programmierung? Was sind die häufigsten Tabellenoperationen in der PHP-Programmierung? Jun 12, 2023 am 09:46 AM

In der Webentwicklung sind Tabellen die grundlegendsten und am häufigsten verwendeten Elemente, und PHP ist eine beliebte serverseitige Programmiersprache. Es gibt viele gängige Techniken und Methoden für Tabellenoperationen. In diesem Artikel werden gängige Tabellenoperationen in der PHP-Programmierung vorgestellt. Datentabellen anzeigen In PHP können Sie das Tabellen-Tag in HTML verwenden, um Datentabellen anzuzeigen. Beachten Sie, dass die Tabelle in einem PHP-Skript generiert werden muss. Hier ist ein Beispiel für ein einfaches HTML-Tabellen-Tag: <table><tr>

Beispiel für die Verwendung einer PHP-Abfrageanweisung Beispiel für die Verwendung einer PHP-Abfrageanweisung Mar 23, 2024 am 11:27 AM

PHP ist eine leistungsstarke serverseitige Skriptsprache, die in der Webentwicklung weit verbreitet ist. Bei der Webentwicklung müssen wir häufig mit der Datenbank interagieren und Abfrageanweisungen ausführen, um Daten abzurufen. In diesem Artikel erfahren Sie, wie Sie Abfrageanweisungen und Anwendungsbeispiele in PHP schreiben. 1. Verbindung zur Datenbank herstellen Bevor Sie PHP zum Abfragen der Datenbank verwenden, müssen Sie zunächst eine Verbindung mit der Datenbank herstellen. Im Allgemeinen verwenden wir die MySQL-Datenbank als Beispiel. Der Code zum Herstellen einer Verbindung zur Datenbank lautet wie folgt: $servername=

Warum macht mein Go-Programm beim Ausführen von SQL-Abfragen einen Fehler? Warum macht mein Go-Programm beim Ausführen von SQL-Abfragen einen Fehler? Jun 09, 2023 pm 06:10 PM

Bei der Go-Programmierung ist die Verwendung von SQL-Abfragen eine häufige Aufgabe. Bei der Ausführung von SQL-Abfragen treten jedoch manchmal Fehler auf, die dazu führen, dass das Programm nicht korrekt ausgeführt wird. Um diese Fehler zu beheben, müssen wir ein tiefes Verständnis dafür haben, wie SQL-Abfragen und die Go-Sprache interagieren. Nachfolgend finden Sie einige mögliche Fehler und entsprechende Lösungen. Fehlender Datenbanktreiber In der Go-Sprache müssen Sie einen bestimmten Datenbanktreiber verwenden, um eine Verbindung zur Datenbank herzustellen und diese zu betreiben. Wenn Sie versuchen, eine Datenbankabfrage durchzuführen und der Datenbanktreiber nicht ordnungsgemäß installiert und konfiguriert ist

Die meisten Methoden zur Optimierung der SQL-Abfrageeffizienz in der PHP-Programmierung Die meisten Methoden zur Optimierung der SQL-Abfrageeffizienz in der PHP-Programmierung Jun 23, 2023 am 10:37 AM

Mit der Entwicklung der Netzwerktechnologie ist die PHP-Programmierung für viele Unternehmen zum Mainstream der Website-Entwicklung geworden. Bei der PHP-Programmierung ist die Effizienz von SQL-Abfragen ein Problem, das von jedem Programmierer seine Aufmerksamkeit erfordert und mit dem er sich befassen muss. Ineffiziente SQL-Abfragen können zu einer langsamen Reaktion der Website, einer hohen Systemlast oder anderen unfreundlichen Effekten führen. Daher konzentriert sich dieser Artikel auf die Einführung verschiedener Methoden zur Optimierung der SQL-Abfrageeffizienz in der PHP-Programmierung, um die Ausführungseffizienz des Programms und die Reaktionsgeschwindigkeit des gesamten Systems zu verbessern. Datenbankindex Der Datenbankindex ist eine grundlegende Methode zur Verbesserung der Geschwindigkeit von Datenbankabfragen

Wie optimiert man SQL-Abfrageanweisungen und die Indexnutzung in der PHP-Entwicklung? Wie optimiert man SQL-Abfrageanweisungen und die Indexnutzung in der PHP-Entwicklung? Nov 02, 2023 pm 12:12 PM

Wie optimiert man SQL-Abfrageanweisungen und die Indexnutzung in der PHP-Entwicklung? In der PHP-Entwicklung ist die Datenbankabfrage ein sehr häufiger Vorgang. Wenn jedoch die Datenmenge zunimmt, kann die Abfrageleistung beeinträchtigt werden, was zu einer Verlangsamung der Anwendung führt. Um die Abfrageleistung zu verbessern, müssen wir die Verwendung von SQL-Abfrageanweisungen und -Indizes optimieren. In diesem Artikel werden einige Optimierungstipps und Best Practices vorgestellt, die Ihnen helfen, die SQL-Abfrageleistung in der PHP-Entwicklung zu verbessern. 1. Verwenden Sie den richtigen Index: Der Index ist ein wichtiger Bestandteil der Datenbank, um die Abfrageleistung zu verbessern. in Designdaten

Wie frage und filtere ich Daten in MySQL mithilfe von SQL-Anweisungen? Wie frage und filtere ich Daten in MySQL mithilfe von SQL-Anweisungen? Dec 17, 2023 pm 05:13 PM

Wie frage und filtere ich Daten in MySQL mithilfe von SQL-Anweisungen? MySQL ist ein häufig verwendetes relationales Datenbankverwaltungssystem. Es bietet eine leistungsstarke SQL-Abfragesprache, mit der wir Daten einfach abfragen und filtern können. In diesem Artikel wird erläutert, wie Sie SQL-Anweisungen zum Abfragen und Filtern von Daten in MySQL verwenden, einschließlich der Verwendung der SELECT-Anweisung für einfache Abfragen, der Verwendung der WHERE-Klausel für bedingte Filterung, der Verwendung der ORDERBY-Klausel zum Sortieren und der Verwendung von LIMIT

See all articles