Ho più database su una singola istanza di SQL Server 2005. Ho creato un sinonimo su un database per accedere a una tabella su un altro database e quando si scrivono le mie query, mi piacerebbe utilizzare un indice specifico, tuttavia, quando si valuta il piano di esecuzione, non sembra utilizzarlo. Se scrivo la query per accedere esplicitamente al database, funziona, ma non riesco a farlo funzionare usando un sinonimo. Per esempio:Tabella SQL Server Sinonimi con indici
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)
non cede lo stesso piano di esecuzione come
select *
from testdb_synonym with (index(testindex))
|--Clustered Index Scan(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]))
Si tratta di una limitazione con Sinonimi o c'è qualcosa di specifico che devo fare per ottenere questo lavoro?
Potresti pubblicare i piani sottostanti per entrambe le domande? Basta eseguire 'SET SHOWPLAN_TEXT ON GO SELECT ...' – Quassnoi
Ho aggiornato la descrizione per includere il piano di esecuzione ... –