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


18

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?

Réponses:


21

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 en fonction du 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êtes fait quelque chose de mal (par exemple, choisir FTS lorsque vous savez qu'un index serait mieux).


2
+1 Je n'aurais pas pu mieux l'expliquer. Il est important de se rappeler que les statistiques ne sont utiles que si elles sont tenues à jour. Cela peut être fait avec des statistiques de mise à jour automatique ou une commande de mise à jour des statistiques régulièrement planifiée (tous les soirs / toutes les semaines). De plus, les reconstructions d'index effectueront automatiquement une mise à jour des statistiques.
Matt M

5

Ils sont utilisé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


2
Pas toujours. Il peut arriver que la création manuelle d'une statistique puisse améliorer les performances des requêtes.
mrdenny

@mrdenny: Combien de fois avez-vous fait cela dans la vraie vie? Très rarement. Je n'ai pas IIRC. S'il a besoin de statistiques, on pourrait dire qu'il a besoin d'un index, qui a quand même des statistiques. Vous ne pouvez créer des statistiques de colonne que selon CREATE STATISTICS . Étant donné qu'OP devait poser des questions sur les statistiques, je dirais que c'est une chose juste à faire.
gbn

1
Je l'ai fait plusieurs fois, mais pas souvent. J'allais à l'encontre de votre déclaration "Votre seule préoccupation devrait être de mettre à jour régulièrement", car la mise à jour des statistiques n'est pas la seule chose.
mrdenny
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.