昨天架构师建议我将一个对远程 db server 的查询修改为先配置一个 Linked Server,然后查询。这样做的目的是可以在本地把 SQL 写到一个存储过程里面,程序调用方便一点(因为不具有远程数据库的管理权限)。但是我实践了一下后,发现这样修改后性能超慢!甚至根本查不出来。后来网上搜了一下,对 Linked Server 的查询,很多情况下是需要把大量数据发送到本地来处理的,这样不慢才怪了。这还没有涉及到本地和远程表做 join 的情况,就已经吃不消了。所以对 Linked Server 的操作一定要当心,要有明确的概念哪些数据会在远端被执行?哪些要在网络中发送大量数据的?如果需要得到的是 Count, Sum 等聚合信息,那么尽量不要用这个办法。另外 OpenQuery 函数可以指定在远端处理结果后返回,而不是在本地处理。这个还没有实验,先在这里记录一下。
参考:
http://www.sql-server-performance.com/tips/linked_server_p1.aspx
http://stackoverflow.com/questions/132305/linked-server-performance-and-options
作者:木野狐@博客园
转载请注明出处。