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
Bereitstellungsumgebung: Installationsversion Red...
Amtliche Dokumentation: Daher sollte MySQL wie fo...
1.1 Kopieren Sie das Nginx-Installationspaket und...
Inhaltsverzeichnis 1. Installation 2. Ins Projekt...
1. Immobilienliste Code kopieren Der Code lautet w...
In diesem Artikel finden Sie den spezifischen Cod...
Inhaltsverzeichnis Einführung Spiegel-Repository ...
1. Hintergrund 1. Das Frontend verwendet vue + vu...
Vorwort Ich muss dem Markodwn-Editor, den ich ger...
Die Übergangsdokumentadresse definiert eine Hinte...
Ich habe zuvor die Verwendung des asynchronen Lad...
Inhaltsverzeichnis Vorwort So lösen Sie Sudoku Fü...
Lassen Sie mich ein Problem zusammenfassen, mit d...
Inhaltsverzeichnis Vorwort sql_mode erklärt Die w...
Docker nimmt viel Platz ein. Immer wenn wir Conta...