连接到链接服务器时查询速度慢

我有这个问题
UPDATE linkeddb...table SET field1 = 'Y' WHERE column1 = '1234'
这需要23秒来选择和更新一行 但是如果我使用openquery(我不想这样做)那么它只需要半秒钟。 我不想使用openquery的原因是我可以安全地为我的查询添加参数,并且可以安全地进行SQL注入。 有谁知道它运行这么慢的任何原因?     
已邀请:
这是一种思考作为替代方案。在远程服务器上创建存储过程以执行更新,然后从本地实例调用该过程。
/* On remote server */
create procedure UpdateTable
    @field1 char(1),
    @column1 varchar(50)
as
    update table
        set field1 = @field1
        where column1 = @column1
go

/* On local server */
exec linkeddb...UpdateTable @field1 = 'Y', @column1 = '1234'
    
如果您正在寻找原因,可以参考Linchi Shea的博客:   在何时创建最佳查询计划   你在链接上使用表   服务器,查询处理器必须具备   来自的数据分布统计   链接服务器。有限的用户   任何列的权限   表可能没有足够的   获得所有有用的权限   统计,并可能得到无奈   高效的查询计划和经验   表现不佳。如果链接   server是SQL Server的一个实例   获取所有可用的统计数据   用户必须拥有该表或成为成员   sysadmin固定服务器角色,   db_ownerfixed数据库角色,或者   db_ddladmin修复了数据库角色   linkedserver。 (由于Linchi的帖子,这个澄清已被添加到最新的BooksOnline SQL文档中)。 换句话说,如果使用具有有限权限的用户设置链接服务器,则SQL无法检索表的准确统计信息,并且可能选择执行查询的不良方法,包括检索所有行。 这是关于链接服务器查询性能的相关SO问题。他们的结论是:使用OpenQuery获得最佳性能。 更新:Linchi博客中关于链接服务器性能的一些其他优秀帖子。     
是column1的主键吗?可能不是。尝试使用主键(其中PK_field = xxx)选择要更新的记录,否则(有时?)将读取所有记录以查找要更新的记录的PK。     
column1是varchar字段吗?这就是为什么你用单引号围绕值1234?或者这只是你问题中的拼写错误?     

要回复问题请先登录注册