问题描述
我们刚刚将数据库环境从服务器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_a
和DATABASE_1.dbo.table_a
,另一台服务器(链接的服务器)的SELECT with JOIN
和DATABASE_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