Während dieser Zeit stieß ich bei der Arbeit an einem Projekt auf ein Modul, bei dem die Verbindungen zwischen den Daten sehr komplex waren. Beim Erstellen der Tabelle war ich sehr verwirrt. Wie soll ich mit diesen komplexen Daten umgehen? Soll ich eine einzelne Tabelle abfragen und dann die Beziehung zwischen den Daten auf der Geschäftsebene behandeln oder soll ich die Datenbeziehung direkt über eine Verbindungsabfrage für mehrere Tabellen behandeln? Nach der Konsultation von Materialien und der Lektüre von Blogs gibt es zwei Antworten: 1. Antworten in „High Performance MySQL“Viele Hochleistungsanwendungen zerlegen zugehörige Abfragen. Sie können ganz einfach für jede Tabelle eine einzelne Tabellenabfrage durchführen und die Ergebnisse dann in Ihrer Anwendung zusammenführen. Beispielsweise die folgende Abfrage: Wählen Sie * aus dem Tag aus trete tag_post bei tag_post.tag_id=tag.id Beitrag beitreten am tag_post.post_id=post.id wobei tag.tag='mysql'; Kann stattdessen in die folgenden Abfragen unterteilt werden: Wählen Sie * aus dem Tag, wobei tag='mysql'; Wählen Sie * aus Tag_Post, wo Tag_ID = 1234; Wählen Sie * aus dem Beitrag, in dem die ID in (123,456,567,9989,8909) ist. Warum um alles in der Welt tun Sie das? Auf den ersten Blick bringt dies keinen Vorteil. Die ursprüngliche Abfrage wird hier zu mehreren Abfragen und die zurückgegebenen Ergebnisse sind genau dieselben. Tatsächlich bietet die Rekonstruktion von Abfragen durch Zerlegung zugehöriger Abfragen die folgenden Vorteile: (Bei Anwendungen mit hoher Parallelität und hoher Leistung wird im Allgemeinen die Verwendung von Einzeltabellenabfragen empfohlen.) 2. Nach dem Aufteilen der Abfrage kann die Ausführung einer einzelnen Abfrage die Sperrkonflikte reduzieren. 3. Durch das Erstellen von Verknüpfungen auf der Anwendungsebene wird die Aufteilung der Datenbank erleichtert und eine hohe Leistung und Skalierbarkeit erreicht. 4. Die Effizienz der Abfrage selbst kann ebenfalls verbessert werden. 5. Es kann die Abfrage redundanter Datensätze reduzieren. 6. Darüber hinaus entspricht dies der Implementierung von Hash-Joins in der Anwendung, anstatt die verschachtelten Ring-Joins von MySQL zu verwenden. In einigen Szenarien sind Hash-Joins viel effizienter. 7. Die Abfrage einer einzelnen Tabelle ist bei großen Datenmengen für die spätere Aufteilung von Datenbanken und Tabellen von Vorteil. Wenn eine gemeinsame Abfrage verwendet wird, muss das ursprüngliche SQL geändert werden, sobald die Datenbank aufgeteilt ist. 8. Als ich das letzte Mal sah, wie ein CTO seine Technologie teilte, legte das Unternehmen fest, dass Join-Abfragen auf der untersten Ebene verboten seien. Bei großen Datenmengen ist es tatsächlich langsam. 9. Join-Abfragen können zwar tatsächlich schnell sein, aber MySQL-Ressourcen sind normalerweise viel knapper als Programmcode-Ressourcen. 2. Einige andere AntwortenHypothetisches Szenario: Angenommen, die Website verfügt über einen Bereich mit einer Firmenbibliothek und ich möchte nach allen Firmen in einer bestimmten Stadt suchen. Datentabellen: tbl_company (t1), tbl_city (t2). Beispiel 1:
Beispiel 2: Die Tabelle t1 speichert den cityName. Wenn der Benutzer im Frontend auf Shanghai klickt, wird die ID von Shanghai an das Backend übergeben (ohne die Übergabe des cityName zu berücksichtigen).
Der Unterschied zwischen beiden: Beispiel 1 führt nur eine Tabellenassoziationsabfrage aus, während Beispiel 2 zwei einzelne Tabellenabfragen ausführt. Angesichts der großen Datenmenge wirken sich Verknüpfungsabfragen mit mehreren Tabellen auf die Abfrageeffizienz aus. Daher werden sie alle auf Einzeltabellenabfragen optimiert. TP: Das Obige ist ohne Verwendung von Indizes Welches wird effizienter sein? Antwort: SQL-Optimierung ist auch geschäftsbezogen. Wird diese Anweisung häufig abgefragt? Sollte der durch zwei Verbindungen verursachte Overhead berücksichtigt werden? Wenn diese nicht berücksichtigt werden müssen und kein Index vorhanden ist, ist der Unterschied nicht groß. 2 sollte etwas besser sein als 1. Wenn die Daten nicht besonders groß sind, ist die kaskadierende Abfrage immer noch schneller. Reduzieren Sie bei herkömmlichen Datenbanken die Anzahl der Datenbankabfragen so weit wie möglich. ABER: 1. MySQL verarbeitet Verbindungen/Verbindungsabbrüche sehr schnell und antwortet auf kleine und einfache Abfragen. 2. Die heutigen Netzwerke sind sehr schnell. Mehrere kleine Abfragen können also für MySQL schneller sein. Schließlich hat der Meister keine Schlussfolgerung darüber, welche Methode besser ist. Haha, tatsächlich drückt das ganze Buch eine Bedeutung klar aus: Testen! Benchmarken! Testen Sie beide Methoden in Ihrer eigenen Datenumgebung. Lassen Sie die Daten für sich selbst sprechen. AbschlussIch persönlich empfehle die Verwendung einer einzelnen Tabellenabfrage! Besser wäre es, die Daten bereits auf der Anwendungsebene zu verknüpfen! Oben sind die Details zum Problem der Effizienz von MySql-Einzeltabellenabfragen und -Verbindungsabfragen mit mehreren Tabellen aufgeführt. Weitere Informationen zur Effizienz von MySql-Einzeltabellen- und -Verbindungsabfragen mit mehreren Tabellen finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Detaillierte Analyse der HTML-Semantik und der zugehörigen Front-End-Frameworks
>>: Prozess des Klassenlademechanismus von Tomcat und Quellcodeanalyse
Wenn es um Tool-Websites geht, haben wir zunächst...
Hallo zusammen, heute werde ich die Implementieru...
Wie lösche ich Umgebungsvariablen unter Linux? Ve...
Beim Ändern der Zeitzone unter Linux ist es immer...
Dieser Artikel erläutert anhand von Beispielen di...
Das Erlernen von Linux-Befehlen stellt für die me...
Schritt 1: Öffnen Sie mit dem Editor die Datei „m...
Laut dem Datenanalyseunternehmen Net Market Share...
Entsprechend den wichtigsten Websites und persönl...
MySQL-SQL-Anweisung zum Erstellen einer Tabelle A...
Inhaltsverzeichnis Strukturelle Vererbung (implem...
Das Daten-URI-Schema ermöglicht es uns, Daten mith...
Als leichte Open-Source-Datenbank wird MySQL häuf...
Inhaltsverzeichnis 1. Verständnis der Gleichheits...
Inhaltsverzeichnis 1. Hintergrund 2. Anweisungen ...