dica noexpand para edição e desempenho não empresariais

11

Eu preciso usar as visualizações indexadas para alcançar o desempenho. Como posso ver nesta tabela de comparação , a edição padrão não suporta exibições indexadas. Mas BOL diz:

Exibições indexadas podem ser criadas em qualquer edição do SQL Server. No SQL Server Enterprise, o otimizador de consulta considera automaticamente a exibição indexada. Para usar uma exibição indexada em todas as outras edições, a dica de tabela NOEXPAND deve ser usada.

Então, vai funcionar (eu estou falando sobre desempenho)

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

na edição do SQL Server Standard e também funciona

select * from dbo.OrderTotals

no Enterprise?

Aqui está o código para visualização:

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)
garik
fonte

Respostas:

14

A diferença é que a edição Enterprise sem a dica pode decidir não usar a exibição indexada, mas as tabelas base.

Minha experiência pessoal é que o SQL Server está de certa forma discutindo isso. Quase sempre tenho que usar a dica: a consulta é mais rápida com muito menos IO, embora o plano "pareça" pior com uma varredura na exibição que o índice não procura nas tabelas base. E roda de forma mais consistente também

YMMV, é claro :-)

Então, para responder, funcionará (deveria?) Da mesma forma, com base no que vi. Outras pessoas podem ter experiências diferentes e estou interessado em outras respostas

Para evitar o uso da dica em qualquer lugar, você pode agrupar a exibição indexada em outra exibição com a dica: as dicas propagadas para dentro de todas as consultas externas terão automaticamente NOEXPAND.

gbn
fonte
Eu recebi "As dicas de índice não podem ser especificadas em um objeto vinculado ao esquema" quando tentei criar uma visão externa com a ligação do esquema como selecione * de OrderTotals com (noexpand, index = IXCU_xxx). :)
garik
2
@garik: Eu só teria NOEXPAND, não a dica do índice. Há apenas um índice de qualquer forma: é agrupado de modo varredura da tabela = verificação de índice
GBN
sem discussão. fechado :)
garik
Woaaa ... incorporando NOEXPAND ... Inteligente, adoro isso ...
Jérôme Verstrynge