SQL Server:在远程服务器中使用同义词进行查询

问题描述

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

在以前的环境中,我们有一个var settings = { showPostTags: true,showPostContent: true,showCategoryArchive: true,showPosts: 'asRandom',} if (settings.showPosts('asRandom')) { HTML HERE } if (settings.showPosts('asRecent')) { HTML HERE } if (settings.showPosts('asRecentByLabel')) { HTML HERE } 一个DATABASE_1(其中有一个聚集索引)和一个Table_a,其中包含一个引用{ {1}}。使用此同义词(DATABASE_2)的查询运行良好(在1秒内选择前10000个)。

现在,我们有一台服务器的synonym_aDATABASE_1.dbo.table_a,另一台服务器(链接的服务器)的SELECT with JOINDATABASE_1。 相同的查询运行速度非常慢。我可以看到两个环境之间的执行计划是不同的。 Table_a中的索引未在新环境中使用。

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

有人可以解决这个问题吗?

解决方法

使用链接服务器时,执行计划无法看到具有链接的另一台服务器的索引。因此,在通过联接服务器使用查询时,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