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)

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.