Sollte ich zum Entfernen von Duplikaten in MySQL „distinct“ oder „group by“ verwenden?

Sollte ich zum Entfernen von Duplikaten in MySQL „distinct“ oder „group by“ verwenden? 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

Wenn im Deduplizierungsszenario kein Index hinzugefügt wird, wird wahrscheinlicher „distinct“ verwendet. Wenn jedoch ein Index hinzugefügt wird, können sowohl „distinct“ als auch „group by“ verwendet werden.

Zusammenfassen

In diesem Artikel geht es darum, ob für die MySQL-Deduplizierung „distinct“ oder „group by“ verwendet werden soll. Dies ist das Ende des Artikels. Weitere Informationen zur MySQL-Deduplizierung „Distinct Group By“ finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Eine kurze Diskussion zur MySQL-Select-Optimierungslösung
  • MySQL-Beispiel-Tutorial: Ergebnisse auswählen, um ein Update durchzuführen
  • Beheben Sie das Problem, dass die Lese-/Schreibtrennung von MySQL dazu führt, dass Daten nach dem Einfügen nicht ausgewählt werden
  • Wie die MySQL Select-Anweisung ausgeführt wird
  • Detailliertes Beispiel zur Verwendung der distinct-Methode in MySQL
  • Der Unterschied zwischen distinct und group by in MySQL
  • Lassen Sie uns ausführlich über die LIMIT-Anweisung in MySQL sprechen
  • Tutorial der MySQL-Reihe zum Verständnis der Verwendung der Schlüsselwörter „union“ (alles), „limit“ und „exists“
  • Die Auswirkungen des Limits auf die Abfrageleistung in MySQL
  • Verwendung von „Select“, „Distinct“ und „Limit“ in MySQL

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; 

Bildbeschreibung hier einfügen

Überprüfen Sie, ob der Abfrage-Cache aktiviert ist oder nicht. Dies wird durch query_cache_type und query_cache_size bestimmt.

  • Methode 1: Um den Abfragecache auszuschalten, müssen Sie my.ini suchen und query_cache_type Sie müssen die Konfigurationsdatei C:\ProgramData\MySQL\MySQL Server 5.7\my.ini ändern und query_cache_type=0或2 ändern.
  • Methode 2: Setzen Sie query_cache_size auf 0 und führen Sie die folgende Anweisung aus.
Setze globale query_cache_size = 0;

Methode 3: Wenn Sie den Abfrage-Cache nicht deaktivieren möchten, können Sie auch RESET QUERY CACHE verwenden.

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 sql_cache hinzufügen.

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; 

Bildbeschreibung hier einfü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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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; 

Bildbeschreibung hier einfügen

Nach der Ausführung einer ähnlichen nicht indizierten Abfrage wie oben

Bildbeschreibung hier einfügen

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

Bildbeschreibung hier einfügen

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

<<:  So stellen Sie Tencent Cloud Server von Grund auf bereit

>>:  Vue+echarts realisiert Fortschrittsbalken-Histogramm

Artikel empfehlen

So ändern Sie das ROOT-Passwort in MySql8.0 und höheren Versionen richtig

Bereitstellungsumgebung: Installationsversion Red...

Lösen Sie das Problem des MySQL-Datenverlusts, wenn Docker Redis neu startet

Amtliche Dokumentation: Daher sollte MySQL wie fo...

Beispielcode für die Batchbereitstellung von Nginx mit Ansible

1.1 Kopieren Sie das Nginx-Installationspaket und...

Schritte für Vue3 zur Verwendung von Mitt für die Komponentenkommunikation

Inhaltsverzeichnis 1. Installation 2. Ins Projekt...

Sammlung gemeinsamer DIV-Attribute

1. Immobilienliste Code kopieren Der Code lautet w...

WeChat-Applet implementiert Puzzlespiel

In diesem Artikel finden Sie den spezifischen Cod...

Zusammenfassung zum Erlernen von Docker-Befehlen in einem Artikel

Inhaltsverzeichnis Einführung Spiegel-Repository ...

Vue-Beispielcode mit dem Animationseffekt „Übergangskomponente“

Die Übergangsdokumentadresse definiert eine Hinte...

Installations- und Verwendungsschritte für vue-amap

Ich habe zuvor die Verwendung des asynchronen Lad...

Der vollständige Implementierungsprozess von Sudoku mit JavaScript

Inhaltsverzeichnis Vorwort So lösen Sie Sudoku Fü...

Lösung für das Vue-Datenzuweisungsproblem

Lassen Sie mich ein Problem zusammenfassen, mit d...

Detaillierte Erläuterung der Verwendung von MySQL sql_mode

Inhaltsverzeichnis Vorwort sql_mode erklärt Die w...

So bereinigen Sie den von Docker belegten Speicherplatz

Docker nimmt viel Platz ein. Immer wenn wir Conta...