Meu colega me disse que qualquer consulta que usa um servidor vinculado primeiro transfere os dados do servidor remoto para o servidor em que a consulta está sendo executada e, em seguida, aplica filtros. Por exemplo, se eu tiver a seguinte consulta:
select id, region
from linked_server.mydb.dbo.product
where id = 1
A consulta trará todos os dados da tabela de produtos do servidor remoto para o servidor local e aplicará ID=1
. Não encontrei essa informação no site da Microsoft. Isso é verdade?
Depende, mas pode acontecer sim. Existem duas operações principais dentro de um plano de execução para uma consulta que acessa um Linked Server:
Remote Scan
eRemote Query
.Dependendo de quais informações o otimizador tem disponível, quais índices estão nas tabelas envolvidas no lado remoto e a própria consulta,
Remote Scan
pode ser escolhida uma operação que varrerá toda a tabela no lado remoto e retornará todos os dados dele através do Linked Server, antes de filtrá-lo no lado local.Com uma indexação adequada e uma consulta bem escrita, é possível influenciar o otimizador a usar a operação geralmente mais eficiente de um
Remote Query
, que executará os filtros no lado remoto, antes de retornar os dados pelo Linked Server.Pessoalmente, descobri que geralmente você pode influenciar o otimizador a usar a
Remote Query
operação mais eficiente quando os dados são indexados corretamente no lado remoto e a consulta em questão filtra por esses campos indexados ou minimamente pela chave primária da tabela.Você pode encontrar mais informações úteis sobre o assunto em Sondagem eficiente de fontes de dados remotas .