SELECT TOP é lento, independentemente de ORDER BY

Tenho uma consulta bastante complexa no SQL Server executando em uma exibição, no formato:

SELECT *
   FROM myview, foo, bar 
   WHERE shared=1 AND [joins and other stuff]
   ORDER BY sortcode;

O plano de consulta, como mostrado acima, mostra umSort operação imediatamente antes da finalSELECT, o que eu esperaria. Existem apenas 35 registros correspondentes, e a consulta leva menos de 2 segundo

Mas se eu adicionarTOP 30, a consulta leva quase 3 minutos! UsandoSET ROWCOUNT é tão lento.

Observando o plano de consulta, agora parece classificar todos os mais de 2 milhões de registros emmyview antes junções e filtro

Esta "classificação" é mostrada no plano de consulta como uma Verificação de índice nosortcode index, uma busca de índice clusterizado na tabela principal e um loop aninhado entre eles, tudo antes das junções e filtro

Como forçar o SQL Server aSORT antes de TOP, como acontece quandoTOP não está especificado?

Eu não acho que a construção demyview é o problema, mas por precaução, é algo como isto:

CREATE VIEW myview AS
   SELECT columns..., sortcode, 0 as shared FROM mytable
   UNION ALL
   SELECT columns..., sortcode, 1 as shared FROM [anotherdb].dbo.mytable

O localmytable tem alguns milhares de registros emytable no outro banco de dados na mesma instância do MSSQL possui alguns milhões de registros. Ambas as tabelasdo índices em seus respectivossortcode column.

questionAnswers(1)

yourAnswerToTheQuestion