web-dev-qa-db-fra.com

Avertissement pour les statistiques manquantes dans le plan d'exécution

J'ai une situation que je ne peux pas comprendre. Mon plan d'exécution SQL Server me dit que j'ai des statistiques manquantes sur la table, mais les statistiques sont déjà créées:

Warning

Mais si nous regardons le tableau, nous verrons qu'il existe une statistique qui a été créée automatiquement:

enter image description here

Quelqu'un peut-il aider à comprendre comment cela peut être?

Les statistiques Auto_Update et Auto_Create sont activées sur la base de données actuelle.

J'utilise SQL Server 2014.

25

L'avertissement ne correspond pas toujours aux statistiques manquantes à une seule colonne .

Il n'y a pas de moyen facile de déterminer avec précision la statistique exacte que l'optimiseur a recherchée et n'a pas trouvée dans tous les cas, mais c'est presque toujours une statistique multi-colonnes qui fournirait des informations de corrélation à travers l'égalité multiple prédicats dans la requête.

Peut-être que dans votre cas, cela correspond exactement aux prédicats du filtre suivant l'analyse où l'avertissement apparaît.

Ce serait bien si SQL Server signalait toutes les colonnes pour l'avertissement de "statistique manquante", mais ce n'est malheureusement pas ainsi que cela fonctionne aujourd'hui.

Une certaine quantité d'essais et d'erreurs peut être nécessaire pour identifier la statistique à plusieurs colonnes que vous devez créer pour supprimer l'avertissement. Notez que les statistiques multi-colonnes ne peuvent pas être créées automatiquement. Malgré l'avertissement, vous pouvez ou non trouver la qualité de l'estimation s'améliore même si la statistique manquante est fournie.

17
Paul White 9

Puisqu'il semble clair qu'une statistique existe déjà pour la colonne particulière, j'offre deux possibilités:

  1. L'explorateur d'objets pointe vers une autre base de données - je suis suspect parce que la base de données a DEV dans le nom, il est donc possible que dans un cas vous regardiez dev et dans un autre vous ne soyez pas.
  2. Le plan utilisé date d'avant la création de la statistique (soit il a été généré plus tôt, soit, moins probablement, quelque chose a empêché une recompilation d'être déclenchée lors de la création de la statistique).

Veuillez valider que la réponse simple (1) n'est pas le problème et essayez d'émettre la même requête avec OPTION (RECOMPILE) pour confirmer ou exclure (2).

8
Aaron Bertrand

Je viens de remarquer que lorsque vous obtenez de tels avertissements sur les statistiques, si vous exécutez votre requête ou procédure avec les paramètres ci-dessous:

SET SHOWPLAN_ALL ON

enter image description here

vous pouvez voir quelles sont les statistiques manquantes:

enter image description here

et en utilisant les scripts ici vous pouvez voir quelles statistiques sont actuellement en place, et si elles manquent, vous pouvez les ajouter.

3