我在SQL Server 2005的单个实例上有多个数据库。我已经在一个数据库上创建了一个同义词来访问另一个数据库上的表,并且在编写查询时,我想利用特定的索引,但是,当评估执行计划,它似乎没有使用它。如果我编写查询以显式访问数据库,则该查询可以工作,但是我似乎无法使用同义词来使其正常工作。例如:
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)
产生的执行计划与
select *
from testdb_synonym with (index(testindex))
|--Clustered Index Scan(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]))
这是同义词的限制吗?或者我需要做一些特定的事情才能使它起作用?
最佳答案
这是Microsoft已修复的错误:请参阅MS KB 963684