Die Partition By-Klausel kann verwendet werden, um die Abfrageleistung zu verbessern. Es reduziert den Speicherbedarf und verbessert die Datenverwaltung. Durch die Partitionierung einer großen Tabelle können Abfragen, die nur auf einen kleinen Teil der Daten zugreifen, schneller ausgeführt werden. Durch die Partitionierung werden auch die Sicherungs- und Wiederherstellungszeiten verkürzt. In diesem Artikel besprechen wir die Partition By-Klausel in MySQL mit Syntax und verschiedenen Beispielen.
Der Zweck der PARTITION BY-Klausel besteht darin, die Zeilen einer Tabelle in separate Partitionen zu gruppieren. Dies ist besonders nützlich, wenn Sie Berechnungen für bestimmte Zeilen innerhalb einer Partition durchführen und dabei andere Zeilen in derselben Partition verwenden.
PARTITION BY-Klausel muss immer innerhalb einer OVER()-Klausel verwendet werden. Mit der PARTITION BY-Klausel erstellte Partitionen werden auch als Fenster bezeichnet. Diese Klausel arbeitet speziell mit Fensterfunktionen wie RANK(), LEAD() und LAG().
Wenn Sie die PARTITION BY-Klausel aus der OVER()-Klausel ausschließen, wird die gesamte Tabelle als eine einzelne Partition behandelt.
Window_function ( expression ) Over ( partition by expr [order_clause] [frame_clause] )
order_clause und frame_clause sind optionale Bestandteile der Grammatik.
In MySQL kann der Ausdruck in der Partitionsklausel ein Spaltenname oder eine integrierte Funktion sein. In Standard-SQL sind in Ausdrücken jedoch nur Spaltennamen zulässig.
Nehmen wir als Beispiel die Tabelle „Hacker“ -
h_id |
h_name |
challenge_id |
Ergebnis |
---|---|---|---|
3 |
Raju |
111 |
20 |
2 |
Mishlesh |
111 |
80 |
5 |
Rudra |
112 |
40 |
5 |
Mohan |
114 |
90 |
4 |
Rohan |
112 |
30 |
1 |
Sohan |
112 |
40 |
Wir müssen die Rangfolge jedes Hackers in jeder Herausforderung ermitteln. Mit anderen Worten, wir müssen alle Hacker auflisten, die an der Challenge teilgenommen haben, und ihre jeweiligen Platzierungen bei dieser Challenge.
Um dies zu erreichen, verwenden wir die folgende Abfrage:
select challenge_id, h_id, h_name, score, dense_rank() over ( partition by challenge_id order by score desc ) as "rank", from hacker;
In dieser Abfrage gruppiert die Partition by-Klausel die Tabelle nach Challenge_ID.
Die Order-By-Klausel sortiert die Hacker in jeder Partition in absteigender Reihenfolge ihrer Punktzahl.
Dieover()-Klausel gibt an, wie Tabellenzeilen für die Fensterfunktion rank() partitioniert und sortiert werden.
Die Fensterfunktion „dense_rank()“ weist jedem Hacker in der geordneten Partition der Herausforderung einen Rang zu. Wenn zwei Hacker die gleiche Punktzahl haben, wird ihnen der gleiche Rang zugewiesen.
Die Ergebnisausgabe zeigt eine Liste aller Hacker und ihre jeweiligen Rankings für jede Herausforderung -
challenge_id |
h_id |
h_name |
Ergebnis |
Ranking |
---|---|---|---|---|
111 |
2 |
Mishlesh |
80 |
1 |
111 |
3 |
Raju |
20 |
2 |
112 |
Rudra |
40 |
1 |
|
112 |
1 |
Sohan |
40 |
1 |
112 | 4 |
Rohan |
30 |
2 |
114 |
5 |
Mohan |
90 |
1 |
So ist es uns gelungen, eine Liste aller Hacker und deren Rangfolge in jeder einzelnen Herausforderung zu erhalten.
Gruppieren Sie die Zeilen einer Tabelle in separate Partitionen, um Berechnungen für bestimmte Zeilen innerhalb der Partitionen durchzuführen.
Reduzieren Sie den Speicherbedarf und verbessern Sie die Datenverwaltung.
Verbessern Sie die Abfrageleistung, indem Sie Abfragen, die nur auf einen kleinen Teil Ihrer Daten zugreifen, schneller ausführen.
Reduzieren Sie die Sicherungs- und Wiederherstellungszeit.
Das obige ist der detaillierte Inhalt vonMySQL PARTITION BY untergeordnete Klausel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!