Minha pergunta inicial era : como alguém determina se é uma boa ideia indexar uma exibição? .
Atualização: Minha suposição subjacente era que as exibições de indexação as aceleram. Aparentemente, isso não é sensato, pois as visualizações apenas executam consultas, como apontam os comentários abaixo.
O que estou fazendo agora é muito semelhante ao que esse cara está fazendo: estou encontrando exibições que selecionam cerca de 2 mil linhas de 2 milhões de linhas, demoram muito para buscar linhas e pensei que um limite de esquema exibição indexada pode ajudar.
A operação que eu estava tentando otimizar é:
select * from vwSample where TYPE_CODE = 'X';
TYPE_CODE
TYPE_CODE
é uma string de 10 caracteres, há cerca de 2 mil valores exclusivos em vwSample
, e cerca de 2 a 5 milhões de linhas em vwSample
, e há entre 2 mil e 10 mil linhas para cada valor exclusivo de TYPE_CODE
. Não postei meu plano de execução porque estava tentando fazer uma pergunta de "prática geral".
Atualização: parece que minha pergunta está errada, devo apenas escrever e otimizar as consultas e ignorar o fato de que há uma exibição, talvez até mesmo escrevê-la como uma consulta regular e ignorar essa exibição. E não há "botões turbo" disponíveis nas visualizações, que possam tornar minha visualização mais rápida, por mágica, como sugere a resposta aceita. Minha pergunta parece se resumir a "Sou um SQL Server n00b
e não sei nada sobre como otimizar exibições, como faço para acelerar select * from vwSomething where KEY=X
onde vwSomething
está uma exibição?".
Normalmente, você indexa exibições se estiver executando agregações com frequência, não para acelerar magicamente as junções. Além disso, se você não estiver usando o particionamento de tabela, não há um bom motivo para investigar exibições indexadas alinhadas à partição.
Você deve se concentrar em otimizar a consulta, independentemente da exibição, IMHO. Uma exibição indexada não é um botão turbo mágico (embora muitas pessoas pensem que é).
Considere também se você deve apenas executar uma consulta separadamente da exibição de qualquer maneira - geralmente as pessoas executam muitas consultas na mesma exibição por conveniência, mesmo que a exibição realmente toque em mais colunas / linhas do que o necessário para a consulta específica.