Jar*_*man 9 sql database sql-server indexing synonym
我在一个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)
Run Code Online (Sandbox Code Playgroud)
不会产生与之相同的执行计划
select *
from testdb_synonym with (index(testindex))
|--Clustered Index Scan(OBJECT:([testdb].[dbo].[testtable].[PK_testtable]))
Run Code Online (Sandbox Code Playgroud)
这是同义词的限制还是我需要做些什么才能让它发挥作用?
这是Microsoft已修复的错误:请参阅MS KB 963684
在Microsoft SQL Server 2005中,您可以为表创建同义词.您对同义词运行查询.该查询使用INDEX优化器提示强制索引.如果检查为查询生成的执行计划,您可能会发现执行计划不使用强制索引.
我测试了同样的事情,似乎查询优化器在通过同义词完成时忽略了该提示。详细信息是我对任意表执行了 select * 操作,并带有索引提示以使用非聚集索引。如果没有同义词,它会执行书签查找/嵌套循环连接。有了它,它就会进行表扫描。由于创建同义词语法上没有选项,我只能假设索引提示被忽略。BOL 中没有详细说明原因。我将其称为“功能”。
| 归档时间: |
|
| 查看次数: |
7639 次 |
| 最近记录: |