Um servidor SERVER_A possui alguns dados.
Um servidor SERVER_B define A como um servidor vinculado e define algumas exibições dos dados. As consultas são assim:
CREATE view myview as
select * from
openquery ( SERVER_A, select .... )
Um servidor SERVER_C define B como um servidor vinculado.
Tenho acesso total ao SERVER_C, posso solicitar algumas alterações no SERVER_B, mas não no SERVER_A. Todos os meus aplicativos acessarão o servidor SERVER_C e precisarão dos dados do SERVER_A. As visualizações em SERVER_B são bastante complexas e causam timeout antes de retornar qualquer coisa.
Acho que para melhorar a performance nessas queries preciso transformar as views no SERVER_B em "views indexadas". Para indexar uma exibição, devo criar um índice clusterizado.
Perguntas:
1) Onde devo definir o índice clusterizado? Deve estar em SERVER_B ou posso de alguma forma defini-lo em SERVER_C?
2) O uso de uma view indexada no SERVER_B afetará de alguma forma o desempenho do SERVER_A mesmo quando a view não estiver sendo usada?
Você não pode criar uma exibição indexada na tabela do servidor vinculado.
De acordo com BOL http://msdn.microsoft.com/en-us/library/ms191432.aspx "A exibição deve fazer referência apenas a tabelas base que estão no mesmo banco de dados que a exibição."
Para melhorar o desempenho, você pode criar uma cópia dos dados do servidor A no servidor C e atualizá-los em um agendamento ou usar a replicação, se possível. Às vezes funciona, se você não precisar de dados muito 'ativos'. Com
OPENQUERY
todo o conjunto de dados é transferido cada vez que a consulta é executada.