SELECT TOP es lento, independientemente de ORDER BY

Tengo una consulta bastante compleja en SQL Server que se ejecuta en una vista, en la forma:

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

El plan de consulta como se muestra arriba muestra unSort operación justo antes de la finalSELECT, que es lo que esperaría. Solo hay 35 registros coincidentes y la consulta tarda menos de 2 segundos.

Pero si agregoTOP 30, la consulta lleva casi 3 minutos! UtilizandoSET ROWCOUNT es igual de lento.

irando el plan de consulta, ahora parece ordenar los más de 2 millones de registros enmyview antes d las uniones y los filtros.

sta "ordenación" se muestra en el plan de consulta como una exploración de índice en lasortcode index, una búsqueda de índice agrupado en la tabla principal y un bucle anidado entre ellos, todo antes de las uniones y los filtros.

¿Cómo puedo forzar a SQL Server aSORT justo ante TOP, como lo hace cuandoTOP@ no está especificado?

No creo que la construcción demyview es el problema, pero por si acaso, es algo como esto:

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

El localmytable tiene unos pocos miles de registros ymytable en la otra base de datos en la misma instancia de MSSQL tiene algunos millones de registros. Ambas mesasdo tiene índices en sus respectivassortcode columna.

Respuestas a la pregunta(1)

Su respuesta a la pregunta