Maison > base de données > tutoriel mysql > Pourquoi les fonctions d'agrégation fenêtrées provoquent-elles des lectures logiques aussi élevées dans SQL Server ?

Pourquoi les fonctions d'agrégation fenêtrées provoquent-elles des lectures logiques aussi élevées dans SQL Server ?

Patricia Arquette
Libérer: 2024-12-31 06:28:13
original
536 Les gens l'ont consulté

Why Do Windowed Aggregate Functions Cause Such High Logical Reads in SQL Server?

Pourquoi les lectures logiques élevées pour les fonctions d'agrégation fenêtrées ?

Lors de l'utilisation de spools de sous-expressions courants dans les plans d'exécution, les lectures logiques ont tendance à être considérablement gonflées pour les grandes tables. Après avoir expérimenté et observé le plan d'exécution, il a été découvert que la formule suivante semble être vraie :

Lectures logiques de la table de travail = 1 NumberOfRows 2 NumberOfGroups 4

Cependant, la raison sous-jacente de cette formule reste floue. Cet article vise à percer le mystère derrière ce calcul de lecture logique.

Comprendre l'exécution de la fonction d'agrégat fenêtré

L'itérateur de segment au début du plan ajoute un indicateur aux lignes indiquant le début de chaque nouvelle partition. Le spool de segments principal récupère ensuite les lignes une par une et les insère dans une table de travail tempdb. Lorsqu'il rencontre le nouvel indicateur de groupe, le spool renvoie une ligne à l'entrée supérieure de l'opérateur de boucles imbriquées.

Cela déclenche l'agrégation du flux sur les lignes de la table de travail, calculant la moyenne. La moyenne calculée est ensuite jointe aux lignes de la table de travail, et la table de travail est tronquée en vue du groupe suivant. La bobine de segments génère une ligne factice pour traiter le groupe final.

Calcul de lecture logique pour les tables de travail

Selon notre compréhension, la table de travail est un tas (ou une bobine d'index si spécifié autrement dans le plan). Dans l'exemple fourni, contrairement aux attentes, seules 11 lectures logiques sont nécessaires. Une explication de cette différence est la suivante :

  • Les insertions de lignes dans la table de travail représentent chacune une lecture logique, ce qui donne 3 lectures logiques.
  • Le calcul de la moyenne implique une lecture logique, soit un total de 4 lectures.
  • Le retour des lignes avec la colonne moyenne implique quatre logiques lectures.
  • La troncature de la table de travail n'entraîne aucune lecture logique.

Cela porte le nombre total de lectures logiques à 4 x 3 = 12, en omettant l'insertion de la quatrième ligne qui déclenche une lecture logique seulement dans l'original scénario.

Conclusion

La clé pour comprendre cette formule réside dans l'écart entre le comptage de lectures logiques pour les tables de travail et les tables de spool classiques. Pour les tables de travail, chaque ligne lue est comptée comme une lecture logique, tandis que pour les tables de spool, chaque page hachée est comptée.

La formule s'aligne sur l'exécution observée : deux spools secondaires sont lus deux fois (2 COUNT ()), tandis que le spool principal émet (COUNT(DISTINCT CustomerID) 1) lignes comme expliqué dans l'entrée de blog mentionnée dans les informations supplémentaires. Le supplément est dû à la ligne supplémentaire émise pour indiquer la fin du groupe final.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal