Maison  >  Article  >  base de données  >  Clause enfant MySQL PARTITION BY

Clause enfant MySQL PARTITION BY

WBOY
WBOYavant
2023-08-29 21:25:021633parcourir

MySQL PARTITION BY 子句

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.

Présentation

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.

Grammaire

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.

Exemple

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 clause

over() 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.

Utilisation de la clause PARTITION BY

  • 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.

Conclusion

La clause PARTITION BY dans MySQL est un outil utile pour regrouper les lignes d'une table en partitions distinctes, améliorant ainsi les performances des requêtes et réduisant les besoins de stockage. Cette clause fonctionne spécifiquement sur les fonctions de fenêtre telles que RANK(), LEAD() et LAG(). La syntaxe est simple et permet une flexibilité dans les types d'expressions utilisés dans les clauses. L'exemple ci-dessus démontre la fonctionnalité de la clause PARTITION BY lors du calcul des ventes totales pour chaque client. En tirant parti de cette fonctionnalité puissante, les utilisateurs peuvent optimiser les performances de la base de données et améliorer la gestion des données.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer