我在2005年我创建了一个同义词在一个数据库访问另一个数据库中的表,写我的查询时,我想利用SQL Server的单个实例多个数据库但是,在评估执行计划时,它似乎没有使用它。如果我编写查询来显式访问数据库,它可以工作,但似乎无法使用同义词来使其工作。例如:SQL Server表的同义词指数
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]))
这是同义词的限制,还是有一些具体的事情,我需要做的就是这个工作?
能否请您发布的这两个查询基本计划?只要运行'SET SHOWPLAN_TEXT ON GO SELECT ...' – Quassnoi 2009-09-01 14:56:16
我已经更新了说明,包括执行计划... – 2009-09-01 16:46:34