La clause Partition By peut être utilisée pour améliorer les performances des requêtes. Il réduit les besoins de stockage et améliore la gestion des données. En partitionnant une grande table, les requêtes qui n'accèdent qu'à une petite partie des données peuvent être exécutées plus rapidement. Le partitionnement réduit également les temps de sauvegarde et de restauration. Dans cet article, nous discuterons de la clause Partition By dans MySQL avec la syntaxe et divers exemples.
Le but de la clause PARTITION BY est de regrouper les lignes d'une table en partitions distinctes. Ceci est particulièrement utile lors de l'exécution de calculs sur des lignes spécifiques au sein d'une partition en utilisant d'autres lignes de la même partition.
La clause PARTITION BY doit toujours être utilisée dans une clause OVER(). Les partitions créées par la clause PARTITION BY sont également appelées fenêtres. Cette clause fonctionne spécifiquement sur les fonctions de fenêtre telles que RANK(), LEAD() et LAG().
Si vous excluez la clause PARTITION BY de la clause OVER(), la table entière sera traitée comme une seule partition.
Window_function ( expression ) Over ( partition by expr [order_clause] [frame_clause] )
order_clause et frame_clause sont des composants facultatifs de la grammaire.
Dans MySQL, l'expression dans la clause Partition peut être un nom de colonne ou une fonction intégrée. Cependant, en SQL standard, seuls les noms de colonnes sont autorisés dans les expressions.
Prenons comme exemple la table « Hacker » -
h_id |
h_name |
challenge_id |
Score |
---|---|---|---|
3 |
Raju |
111 |
20 |
2 |
Mishlesh |
111 |
80 |
5 |
Rudra |
112 |
40 |
5 |
Mohan |
114 |
90 |
4 |
Rohan |
112 |
30 |
1 |
Sohan |
112 |
40 |
Nous devons déterminer le classement de chaque hacker dans chaque défi. En d’autres termes, nous devons lister tous les hackers qui ont participé au challenge et leur classement respectif dans ce challenge.
Pour y parvenir nous utilisons la requête suivante :
select challenge_id, h_id, h_name, score, dense_rank() over ( partition by challenge_id order by score desc ) as "rank", from hacker;
Dans cette requête, la clause partition by regroupe la table par challenge_id.
La clause order by trie les pirates dans chaque partition par ordre décroissant de score.
La clauseover() spécifie comment partitionner et trier les lignes du tableau pour la fonction de fenêtre Rank().
La fonction fenêtre dense_rank() attribue un rang à chaque hacker dans la partition ordonnée du défi. Si deux hackers ont le même score, ils se voient attribuer le même classement.
Le résultat affiche une liste de tous les hackers et leurs classements respectifs pour chaque défi -
challenge_id |
h_id |
h_name |
Score |
Classement |
---|---|---|---|---|
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 |
Nous avons donc réussi à obtenir une liste de tous les hackers et leur classement dans chaque défi individuel.
Regroupez les lignes d'une table en partitions distinctes afin d'effectuer des calculs sur des lignes spécifiques au sein des partitions.
Réduisez les besoins de stockage et améliorez la gestion des données.
Améliorez les performances des requêtes en exécutant plus rapidement des requêtes qui n'accèdent qu'à une petite partie de vos données.
Réduisez le temps de sauvegarde et de récupération.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!