我们对SQL服务器的查询速度很慢。
我们有一些软件在查询中使用SQL Server侦听器的虚拟主机名,这导致查询性能变慢。
UPDATE table SET
status = 1
FROM [HOSTNAMEOFSQLLISTENER].database.dbo.things AS things
WHERE bar = foo
看一下执行计划,它花了所有时间在“远程扫描”阶段,我不知道为什么会这样。
奇怪的是,当运行以下查询时,用侦听器指向的SQL服务器的IP地址替换侦听器的IP地址(并且我确保它是您连接时最终的服务器通过管理工作室通过监听器访问SQL服务器)执行计划是合理的(使用索引),查询在很短的时间内完成。
UPDATE table SET
status = 1
FROM [HOSTNAMEOFSQLSERVERDIRECTLY].database.dbo.things AS things
WHERE bar = foo
显然这种行为在SQLServer2008中不是问题,但我还没有确认。
所以我有两个问题:
1)为什么执行计划不同?
2)在这些场景中,将听众的IP地址视为最佳做法吗?
干杯
艾伦
答案 0 :(得分:1)
问题归结为无法读取链接服务器上的表统计信息,因此查询优化器无法知道从哪里开始。 http://sqlblog.com/blogs/linchi_shea/archive/2009/07/21/performance-impact-linked-server-security-configuration-and-how-it-can-hurt-you.aspx
如果您没有真正来回传递数据,首先要尝试将UPDATE封装在存储过程中。