sql-server - 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_2
synonym_a
table_a
我们尝试添加WITH INDEX
,但无法为远程数据源指定索引提示。我们需要同义词(因为相同的代码会自动部署在不同的站点中,并且在我们的查询、存储过程的代码中不能有服务器/数据库的名称)。而且我们不能用存储过程替换视图。
有没有人有这个问题的解决方案?
解决方案
当您使用链接服务器执行计划时,无法看到您拥有链接的另一台服务器的索引。因此,当通过加入服务器 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
推荐阅读
- java - Eclipse 无法解决 Maven 依赖关系
- sql - 基于 Sql 表格格式电子邮件中的值的颜色代码
- amazon-web-services - AWS CodeBuild GitHub 部署密钥
- php - PHP session_start 恢复以前的会话变量
- javascript - 如何cfoutput 一个JavaScript 字符串?
- azure-traffic-manager - Azure 内部负载均衡器之间的自动故障转移
- java - 将 JAMon 与 Spring 5 和 log4j2 一起使用
- css - 如何为左侧和右侧设置两种不同颜色的标题
- flutter - 如何在 eventChannel 回调方法中解析对象变量?
- flutter - in_app_purchases 使用颤振