Tengo varias bases de datos en una sola instancia de SQL Server 2005. He creado un sinónimo en una base de datos para acceder a una tabla en otra base de datos y cuando escribo mis consultas, me gustaría utilizar un índice específico, sin embargo, al evaluar el plan de ejecución, no parece usarlo. Si escribo la consulta para acceder a la base de datos explícitamente, funciona, pero parece que no puedo hacer que funcione usando un sinónimo. Por ejemplo:SQL Server Tabla de sinónimos con índices
select *
from testdb..testtable with (index(testindex))
|--Nested Loops(Inner Join, OUTER REFERENCES:([testdb].[dbo].[testtable].[id]))
|--Index Scan(OBJECT:([testdb].[dbo].[testtable].[testindex]))
|--Clustered Index Seek(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]), SEEK:([testdb].[dbo].[testtable].[id]=[testdb].[dbo].[testtable].[id]) LOOKUP ORDERED FORWARD)
no produce el mismo plan de ejecución como
select *
from testdb_synonym with (index(testindex))
|--Clustered Index Scan(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]))
Es esto una limitación con sinónimos o hay algo especial que deba hacer para conseguir que esto funcione?
¿Podría publicar planes subyacentes para ambas consultas? Simplemente ejecute 'SET SHOWPLAN_TEXT ON GO SELECT ...' – Quassnoi
He actualizado la descripción para incluir el plan de ejecución ... –