web-dev-qa-db-fra.com

Que sont les statistiques de base de données et comment puis-je en bénéficier?

J'ai entendu parler de statistiques que SQL Server conserve par défaut. Que suivent-ils et comment puis-je utiliser ces informations pour améliorer ma base de données?

18
goric

Les statistiques sont simplement une forme de métadonnées dynamiques qui aident l'optimiseur de requêtes à prendre de meilleures décisions. Par exemple, s'il n'y a qu'une douzaine de lignes dans une table, il ne sert à rien d'aller à un index pour faire une recherche; vous ferez toujours mieux de faire un scan complet de la table. Mais si cette même table atteint un million de lignes, vous feriez probablement mieux d'utiliser l'index. Mais si vous interrogez cette table sur une colonne qui n'a que très peu de valeurs uniques (par exemple, il pourrait s'agir d'une colonne "sexe" contenant uniquement "M" ou "F"), en fait, un FTS pourrait être mieux que ce cas parce que vous le feriez besoin de récupérer le bloc de toute façon pour construire le jeu de résultats. Supposons maintenant que votre table est à 99% "M" et seulement 1% "F", nous devrions FTS dans un cas ou utiliser un index dans l'autre. Même table, même requête, potentiellement quatre plans de requête différents selon le contenu de la table. Ce genre de choses sont les "statistiques" et elles sont individuelles pour chaque base de données - même deux bases de données avec une structure de table et d'index identiques auront des statistiques différentes.

En résumé, dans un moteur de base de données moderne, il existe deux types d'optimisation des requêtes: réécrire le SQL (optimisation basée sur des règles, comme un compilateur réécrit votre C pour le rendre plus efficace) et choisir le bon chemin d'accès aux données (optimisation basée sur les coûts , comme un compilateur JIT identifiant les hotspots lors de l'exécution). Vous n'avez à vous en préoccuper que si vous constatez que l'optimiseur de requête fait quelque chose de mal (par exemple, choisir FTS lorsque vous savez un index serait mieux).

21
Gaius

Ils sont tilisés par l'optimiseur de requêtes (livre blanc sur MSDN) pour suivre la distribution des valeurs dans les index et/ou les colonnes.

Votre seule préoccupation devrait être de mettre à jour régulièrement : il suffit de laisser le moteur DB faire son travail

5
gbn