Maison > base de données > tutoriel mysql > Pourquoi COUNT(*) est-il si lent dans SQL Server et comment puis-je l'accélérer ?

Pourquoi COUNT(*) est-il si lent dans SQL Server et comment puis-je l'accélérer ?

Barbara Streisand
Libérer: 2024-12-26 04:04:09
original
929 Les gens l'ont consulté

Why is COUNT(*) So Slow in SQL Server, and How Can I Speed It Up?

Comprendre les performances du nombre SQL (*)

Considérons une requête qui exécute une opération de comptage sur une table de plus de 20 millions de lignes. Le temps d'exécution varie considérablement en fonction de l'expression de comptage, avec des retards importants pour les expressions qui nécessitent une comparaison (par exemple, count(*) = 1).

Cause première des exécutions lentes

L'explication de cette différence de performances réside dans la technique d'optimisation employée par SQL Server. Pour la première requête (count() = 0), le serveur l'optimise pour vérifier la présence d'éventuelles lignes (exists(select from BookChapters)) plutôt que de les compter.

Dans En revanche, pour les autres requêtes (count() = 1 ou count() > 1), SQL Server utilise un index non clusterisé pour compter les rangées. Cependant, comme la table dans ce cas ne dispose d'aucun index non clusterisé, le serveur doit analyser la table entière, ce qui entraîne un temps d'exécution substantiel.

Améliorations des performances

Pour améliorer les performances des requêtes count(*) :

  • Utiliser les requêtes optimisées : Préférer vérifications d'existence (si existe (sélectionnez dans BookChapters)) au lieu de comparaisons (si count () = 0).
  • Créer un index non clusterisé : Introduire un index non clusterisé -index clusterisé sur une colonne appropriée pour améliorer l'efficacité du comptage de lignes.

Alternative Méthodes pour un décompte rapide des lignes

  • Table système sysindexes : Utilisez la table sysindexes pour obtenir rapidement le nombre de lignes pour les tables avec des index clusterisés.
  • partition spart Rows Sum : Pour les tables partitionnées, additionnez la valeur des lignes de la table sys.partitions (spart) pour obtenir un nombre de lignes rapide.
  • LIGNES maximales de sysindexes : Dans SQL 2000, récupérez la valeur maximale de ROWS de la table sysindexes pour approximer le nombre de lignes actuel (peut varier en fonction sur la fréquence de mise à jour).

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