Mam wiele baz danych na jednej instancji SQL Server 2005. Stworzyłem synonim w jednej bazie danych, aby uzyskać dostęp do tabeli w innej bazie danych i podczas pisania moich zapytań, chciałbym wykorzystać konkretny indeks przy ocenie planu wykonania wydaje się jednak, że go nie używa. Jeśli piszę zapytanie, aby uzyskać jawnie dostęp do bazy danych, działa, ale nie mogę sprawić, by działało, używając synonimu. Na przykład:Nazwy synonimów SQL Server z indeksami
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)
nie daje taki sam plan wykonania jako
select *
from testdb_synonym with (index(testindex))
|--Clustered Index Scan(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]))
Czy to ograniczenie z Synonimy czy jest tam coś konkretnego, co należy zrobić, aby to działało?
Czy możesz przesłać plany dotyczące obu zapytań? Po prostu uruchom 'SET SHOWPLAN_TEXT ON GO SELECT ...' – Quassnoi
Zaktualizowałem opis, aby uwzględnić plan wykonania ... –