web-dev-qa-db-fra.com

Noexpand Indice pour édition et performance non entreprise

Je dois utiliser des vues indexées pour atteindre la performance. Comme je peux le voir à partir de ce tableau de comparaison édition standard ne prend pas en charge les vues indexées. Mais Bol dit:

Les vues indexées peuvent être créées dans n'importe quelle édition de SQL Server. Dans SQL Server Enterprise, la requête Optimizer considère automatiquement la vue indexée. Pour utiliser une vue indexée dans toutes les autres éditions, l'indice NOEXPAND TABLE doit être utilisé.

Cela fonctionnera donc (je parle de performance)

select * from dbo.OrderTotals with (noexpand, index=IXCU_OrderTotals)

sur SQL Server Standard Edition ainsi que cela fonctionne

select * from dbo.OrderTotals

sur l'entreprise une?

Voici le code for View:

CREATE VIEW dbo.OrderTotals
WITH SCHEMABINDING
AS
select 
    OrderId     =   r.OrderId                   
  , TotalQty            =   SUM(r.Quantity)
  , TotalGrossConsid    =   SUM(r.Price * r.Quantity)
  , XCount      =   COUNT_BIG(*)
from dbo.Order r
group by r.OrderId

CREATE UNIQUE CLUSTERED INDEX IXCU_OrderTotals ON OrderTotals (OrderId)
11
garik

La différence est que l'édition d'entreprise sans indice peut décider de ne pas utiliser la vue indexée mais les tables de base à la place.

Mon expérience personnelle est que SQL Server est un peu hébergé dans cela. J'ai presque toujours à utiliser l'indice: la requête est plus rapide avec beaucoup moins IO Même si le plan "l'air" pire avec une analyse à l'affichage non index recherche sur les tables de base. Et fonctionne plus systématiquement aussi

YMMV bien sûr :-)

Donc, pour répondre, cela va (devrait?) Travailler de la même chose en fonction de ce que j'ai vu. D'autres folks peuvent avoir des expériences différentes et je suis intéressé par d'autres réponses

Pour éviter d'utiliser l'indice partout où vous pouvez envelopper la vue indexée dans une autre vue avec le conseil: les astuces se propagent vers l'intérieur à toutes les requêtes extérieures auront automatiquement NOEXPAND.

14
gbn