Vorwort Zum Leistungsvergleich zwischen „group by“ und „distinct“: Die Schlussfolgerung im Internet lautet wie folgt: „distinct“ bietet eine bessere Leistung bei kleinen Datenmengen ohne Index, „group by“ bietet eine bessere Leistung bei großen Datenmengen. „Group by“ mit Index bietet eine bessere Leistung. Beim Durchgehen des Index gilt: Je weniger Gruppierungstypen vorhanden sind, desto schneller ist die Unterscheidung. Überprüfen Sie die gezogenen Schlussfolgerungen online. Deaktivieren des Abfragecaches während der Vorbereitungsphase Überprüfen Sie, ob der Abfragecache in MySQL eingestellt ist. Um die Testergebnisse nicht zu beeinträchtigen, müssen Sie den Abfragecache deaktivieren. Variablen wie „%query_cache%“ anzeigen; Überprüfen Sie, ob der Abfrage-Cache aktiviert ist oder nicht. Dies wird durch
Setze globale query_cache_size = 0; Methode 3: Wenn Sie den Abfrage-Cache nicht deaktivieren möchten, können Sie auch In der aktuellen Testumgebung bedeutet query_cache_type=2, dass die Abfrage bei Bedarf zwischengespeichert wird. Der Standardabfragemodus ist kein Zwischenspeichern. Wenn Zwischenspeichern erforderlich ist, müssen Sie der Abfrageanweisung Datenaufbereitung Tabelle t0 speichert 100.000 Tabelle löschen, falls vorhanden t0; Tabelle t0 erstellen( ID Bigint Primärschlüssel Auto_Increment, ein varchar(255) ungleich null ) Engine=InnoDB Standardzeichensatz=utf8mb4 Sortierung=utf8mb4_bin; 1 2 3 4 5 Löschprozedur insert_t0_simple_category_data_sp; Trennzeichen // Prozedur „insert_t0_simple_category_data_sp(IN num int)“ erstellen beginnen setze @i = 0; während @i < num do in t0(a) einfügen value(truncate(@i/1000, 0)); setze @i = @i + 1; Ende während; Ende // Rufen Sie insert_t0_simple_category_data_sp(100000) auf; Tabelle t1 speichert 10.000 Tabelle löschen, falls vorhanden, t1; Tabelle t1 wie t0 erstellen; 1 2 Löschprozedur insert_t1_complex_category_data_sp; Trennzeichen // Prozedur „insert_t1_complex_category_data_sp(IN num int)“ erstellen beginnen setze @i = 0; während @i < num do in t1(a) einfügen value(truncate(@i/10, 0)); setze @i = @i + 1; Ende während; Ende // Rufen Sie insert_t1_complex_category_data_sp(10000) auf; Die T2-Tabelle speichert 5 Millionen Tabelle löschen, falls vorhanden, t2; Erstellen Sie Tabelle t2 wie t1; 1 2 Löschprozedur insert_t2_complex_category_data_sp; Trennzeichen // Prozedur „insert_t2_complex_category_data_sp(IN num int)“ erstellen beginnen setze @i = 0; während @i < num do in t1(a) einfügen value(truncate(@i/10, 0)); setze @i = @i + 1; Ende während; Ende // Rufen Sie insert_t2_complex_category_data_sp(5000000) auf; Testphase Überprüfen Sie eine kleine Datenmenge Nicht indiziert Profilierung festlegen = 1; wähle ein anderes a als t0; Profile anzeigen; Wähle a aus der t0-Gruppe nach a; Profile anzeigen; Tabelle t0 ändern, Index `a_t0_index`(a) hinzufügen; Dies zeigt, dass bei einer kleinen Anzahl von Typen und wenigen Daten ohne Indizierung die Leistung von „distinct“ und „group by“ nahezu gleich ist. Index hinzufügen Tabelle t0 ändern, Index `a_t0_index`(a) hinzufügen; Nach der Ausführung einer Abfrage ähnlich der obigen Dies zeigt, dass bei einer kleinen Anzahl von Typen und wenigen Daten die Leistung von distinct und group by beim Hinzufügen von Indizes nahezu gleich ist. Stellen Sie sicher, dass eine kleine Datenmenge mit vielen Typen nicht indiziert ist Nach der Ausführung einer ähnlichen nicht indizierten Abfrage wie oben Daraus lässt sich erkennen, dass bei kleinen Datenmengen mit vielen Typen und ohne Index die Leistung von „distinct“ etwas höher ist als die von „group by“, der Unterschied jedoch nicht groß ist. Index hinzufügen Tabelle t1 ändern, Index `a_t1_index`(a) hinzufügen; Nach der Ausführung einer ähnlichen, nicht indizierten Abfrage Daraus lässt sich erkennen, dass bei einer kleinen Datenmenge und vielen Typen die Leistung von „distinct“ und „group by“ beim Hinzufügen von Indizes nahezu gleich ist. Große Datenmengen verifizieren Nicht indiziert WÄHLE Anzahl(1) AUS t2; Nach der Ausführung einer ähnlichen nicht indizierten Abfrage wie oben Dies zeigt, dass DISTINCT bei großen Datenmengen vieler Typen und ohne Indizierung eine bessere Leistung erbringt als GROUP BY. Index hinzufügen Tabelle t2 ändern, Index `a_t2_index`(a) hinzufügen; Nach der Ausführung der oben genannten ähnlichen Indexabfrage Dies zeigt, dass bei großen Datenmengen vieler Typen die Leistung von „distinct“ und „group by“ beim Hinzufügen von Indizes nahezu gleich ist. Zusammenfassen | Leistungsverhältnis | Geringe Menge, wenige Sorten | Kleine Menge, viele Sorten | Große Anzahl an KategorienKeine IndizierungEtwas besserEindeutig ist besserMit IndizierungEtwas andersEtwas andersEtwas andersEtwas andersEtwas anders |
---|
<<: So stellen Sie Tencent Cloud Server von Grund auf bereit
>>: Vue+echarts realisiert Fortschrittsbalken-Histogramm
Inhaltsverzeichnis Probleme, die Redux Toolkit lö...
Warum müssen wir SQL optimieren? Wenn wir SQL-Anw...
Einführung von zwei Methoden zum Anzeigen von MyS...
In diesem Artikel wird der spezifische JavaScript...
System- und Benutzerumgebungsdesign <br />D...
Inhaltsverzeichnis 1. Die Rolle der Nginx-Prozess...
Einfach ausgedrückt bedeutet src „Ich möchte dies...
1. Caches - Abfrage-Cache Die folgende Abbildung ...
Während der Entwicklung wird eine gute Benutzerob...
Inhaltsverzeichnis Überblick Beispiel Warum wird ...
Hintergrund In einer Liste wie der folgenden erfo...
Voraussetzung: Celery wird in Django eingeführt. ...
Die Standard-Firewall von CentOS7 ist nicht iptab...
Wir wissen, dass die in JS am häufigsten verwende...
Code kopieren Der Code lautet wie folgt: <!DOC...