Maison >base de données >tutoriel mysql >Pourquoi les fonctions d'agrégation fenêtrées avec des spools de sous-expressions communs entraînent-elles des lectures logiques aussi élevées ?

Pourquoi les fonctions d'agrégation fenêtrées avec des spools de sous-expressions communs entraînent-elles des lectures logiques aussi élevées ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-29 21:52:10314parcourir

Why Do Windowed Aggregate Functions with Common Subexpression Spools Result in Such High Logical Reads?

Pourquoi les lectures logiques sont-elles si élevées pour les fonctions d'agrégation fenêtrées avec des bobines de sous-expression communes ?

Vous avez remarqué cela dans les plans d'exécution avec une sous-expression commune spools, les lectures logiques signalées pour les grandes tables sont nettement supérieures aux attentes. L'enquête révèle une formule qui semble être vraie : Lectures logiques de la table de travail = 1 NumberOfRows 2 NumberOfGroups 4.

Comprendre la formule

La logique élevée les lectures découlent de la manière unique dont les tables de travail gèrent les lectures. Les lectures logiques dans ce contexte font référence au nombre de lignes lues et non de pages hachées. Cela signifie que pour chaque ligne traitée, la table de travail enregistre une lecture logique.

Répartition des lectures logiques

  • 1 : La première lire pour traiter la première ligne.
  • NumberOfRows * 2 : Chaque ligne est lue deux fois lors des deux passages des spools secondaires.
  • NumberOfGroups * 4 : Le spool primaire émet quatre lignes par groupe : une pour démarrer le groupe, un pour mettre fin au groupe et deux pour contenir les valeurs globales.

Tentative de réplication avec Lectures logiques inférieures

Votre tentative de répliquer le processus avec une table de tas affiche seulement 11 lectures logiques car :

  • Moins de lignes : Votre table de test n'a que 5 lignes par rapport à la plus grande table #Orders.
  • Non imbriqué Boucles : Votre requête utilise un OUTER APPLY au lieu de boucles imbriquées, ce qui élimine le besoin d'une ligne factice.

Conclusion

La formule que vous found est vrai car il reflète avec précision le nombre de lignes lues par la table de travail. Les lectures logiques plus élevées sont dues à la méthode de comptage basée sur les lignes et non à l'inefficacité. Le plan de boucles imbriquées utilisé dans votre requête d'origine amplifie encore ce nombre.

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:
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