3

Est-ce que quelqu'un sait quand SQL Server 2008 R2 est capable de correspondre automatiquement à une vue indexée (également appelée vues matérialisées) qui contient des jointures à une requête?La vue indexée de SQL Server ne correspond pas aux vues dont les jointures ne fonctionnent pas

Par exemple, la vue

select dbo.Orders.Date, dbo.OrderDetails.ProductID 
from dbo.OrderDetails 
join dbo.Orders on dbo.OrderDetails.OrderID = dbo.Orders.ID 

Ne peut pas être automatiquement adaptée à la même requête exacte. Lorsque je sélectionne directement à partir de cette vue with (noexpand), j'obtiens en fait un plan de requête beaucoup plus rapide qui effectue une analyse sur l'index clusterisé de la vue indexée. Puis-je demander à SQL Server de faire cette correspondance automatiquement? J'ai un certain nombre de requêtes et de vues et je ne veux pas référencer la vue indexée manuellement chaque fois parce que j'utilise un mappeur OR.

Je suis sur l'édition entreprise de SQL Server 2008 R2.

Editer: J'ai trouvé la solution. SQL Server 2008 R2 ne correspond pas automatiquement aux vues indexées avec plus de 2 jointures. Probablement, cela ralentirait trop le processus d'optimisation.

Édition 2: Revoir ce 2 ans après que la question a été créée par moi, je ne pense pas que ma conclusion était correcte. La visualisation matérialisée est un processus très fragile sans règles claires que j'ai pu trouver au fil des ans.

Certes, les éléments suivants jouent un rôle:

  • Nombre de jointures
  • Présence d'un prédicat
  • ordre de jointure, à la fois dans la vue et dans la requête

Répondre

2

I suis un peu flou sur exactement quelle est votre question; mais je pense que cela va vous donner ce que vous voulez:

http://msdn.microsoft.com/en-us/library/ms181151.aspx

Il y a beaucoup de conditions étranges, en apparence arbitraires qui limitent lorsque SQL Server utilisera un index de vue dans une requête. Cette page les documente pour SQL Server 2008.

+0

Cette page est très utile, merci. – usr