首页 > 解决方案 > SQL Server:在远程服务器中使用同义词查询

问题描述

我们刚刚将数据库环境从服务器 1 迁移到服务器 2。我们使用的是 SQL Server 2014(旧服务器和新服务器)。

在之前的环境中,我们有一个DATABASE_1带有 a Table_a(其中有一个聚集索引)和一个DATABASE_2包含synonym_a引用DATABASE_1.dbo.table_a. 使用此同义词 ( SELECT with JOIN) 的查询运行良好(在 1 秒内选择前 10000 个)。

现在,我们有一个DATABASE_1带有 的服务器,以及另一个带有的Table_a服务器(链接服务器)。相同的查询运行速度非常慢。我可以看到两个环境之间的执行计划不同。新环境中没有使用索引。DATABASE_2synonym_atable_a

我们尝试添加WITH INDEX,但无法为远程数据源指定索引提示。我们需要同义词(因为相同的代码会自动部署在不同的站点中,并且在我们的查询、存储过程的代码中不能有服务器/数据库的名称)。而且我们不能用存储过程替换视图。

有没有人有这个问题的解决方案?

标签: sql-serverindexinglinked-serversynonym

解决方案


当您使用链接服务器执行计划时,无法看到您拥有链接的另一台服务器的索引。因此,当通过加入服务器 A 使用查询时,自行计划将请求发送到另一台服务器并忽略索引,顺便尝试使用机会这个查询

select * from (
    select * from Table_a order by (column that index in server 2)
              )a inner join (
    select * from server2.db.owner.table_b order by column)b
    on a.id=b.fkid
          

推荐阅读