2009-12-27 2 views
0

j'ai une table avec des colonnes A et B qui sont en corrélation au sens suivant:SQL Server 2008 Statistiques colonnes multiples ne sont pas utilisées par l'estimation du nombre de lignes

A == 1 => B == 3 
A == 2 => B == 0 
A == 3 => B == 7 

avec => signifie implique avec une grande probabilité. Je veux interroger comme ceci:

where A = 2 and B = 3 --very few rows should match 

donc j'ai créé des statistiques sur (A, B). Cependant, l'optimiseur de requêtes rejette complètement le nombre de lignes par un facteur de 10. toutes les idées pourquoi? l'histogramme conjoint devrait permettre une estimation très précise. btw: cardinalité (A) = 10, cardinalité (B) = 5

+1

Vous pouvez accepter plus de réponses, peut-être – gbn

+0

Regardez les questions que j'ai posées. J'ai accepté toutes les réponses qui ont résolu mon problème. Je viens de poser des questions très difficiles ;-) – usr

Répondre

1

Je soupçonne que l'optimiseur ignore les statistiques car toute la requête compte, pas seulement la clause WHERE. Ou vous avez SELECT *. Ou la fréquence d'échantillonnage est trop faible (avez-vous utilisé FULLSCAN?)

Et si vous créez un index, qui a des statistiques d'index? Avec des inclusions aussi pour le faire recouvrir?

Je n'ai jamais créé mes propres statistiques de colonnes (sauf si un plan de requête graphique l'a mentionné). Si je dois les créer, un indice est très susceptible de servir mes fins mieux

Edit:

+0

J'ai utilisé FULLSCAN. Après avoir créé un index, l'estimation devient beaucoup mieux. – usr

+0

J'avais tort: ​​ça ne va pas mieux du tout! – usr

+0

La requête est-elle entièrement couverte par l'index? FULLSCAN sur l'index (avec reconstruire)? – gbn

Questions connexes