J'ai plusieurs bases de données sur une seule instance de SQL Server 2005. J'ai créé un synonyme sur une base de données pour accéder à une table sur une autre base de données et lors de l'écriture de mes requêtes, je voudrais utiliser un index spécifique, cependant, lors de l'évaluation du plan d'exécution, il ne semble pas l'utiliser. Si j'écris la requête pour accéder explicitement à la base de données, cela fonctionne, mais je n'arrive pas à l'obtenir en utilisant un synonyme. Par exemple:Syntaxe de table SQL Server avec index
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)
ne donne pas le même plan d'exécution que
select *
from testdb_synonym with (index(testindex))
|--Clustered Index Scan(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]))
Est-ce une limitation des synonymes ou est-il quelque chose de spécifique que je dois faire pour que cela fonctionne?
Pourriez-vous s'il vous plaît publier des plans sous-jacents pour les deux requêtes? Il suffit d'exécuter 'SET SHOWPLAN_TEXT ON GO SELECT ...' – Quassnoi
J'ai mis à jour la description pour inclure le plan d'exécution ... –