【发布时间】:2010-11-24 16:14:39
【问题描述】:
我在 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]))
这是对同义词的限制,还是我需要做一些特定的事情才能让它发挥作用?
【问题讨论】:
-
能否请您发布两个查询的基本计划?只需运行
SET SHOWPLAN_TEXT ON GO SELECT … -
我已经更新了描述以包含执行计划...
标签: sql sql-server database indexing synonym