使用变量与文字时远程查询速度很慢

2024-01-14

我到处寻找这种情况,但找不到解决方案除了动态 SQL,我不想使用它.

这是我想要在服务器 2 上更新的表:

(Stuff Id UNIQUEIDENTIFIER
, stuffname NVARCHAR(64))

我需要从服务器 1 更新它。

所以我一直在尝试这样做:

DECLARE @newstuff nvarchar(64)

SELECT @newstuff = 'new stuff'

UPDATE [server2].database2.dbo.Stuff
SET stuffname=@newstuff
WHERE stuffId='4893CD93-08B3-4981-851B-5DC972288290'

这需要 11 秒。下一个使用文字的运行时间不到 1 秒

UPDATE [server2].database2.dbo.Stuff
SET stuffname='new stuff'
WHERE stuffId='4893CD93-08B3-4981-851B-5DC972288290'

我对比了实际的执行计划。慢的是进行远程扫描,需要 100% 的成本,再加上 5 个其他步骤(过滤器、表假脱机、计算标量、远程更新、更新)。快速的只执行更新和远程查询步骤。我需要使用变量,所以我需要一种方法来强制它远程执行整个查询。

我尝试过使用 OPTION(RECOMPILE),但 server1 使用的是 SQL Server 2005。server2 使用的是 SQL Server 2012。如果没有严重问题,我根本无法更改 server2 上的数据库结构。我没有任何身份验证问题。我在更新表时尝试给表添加别名。

我也尝试过使用 Openquery。当我将 id 过滤器放入查询字符串中时,它会恢复到 1 秒以下:

UPDATE OPENQUERY([server2], 'select stuffname, stuffid from database2.dbo.stufftable where contactid=''4CA1D489-9221-E511-A441-005056C00008''')
SET stuffname = @newstuff

但我也需要该 id 成为一个变量,并且该开放查询不接受变量(https://msdn.microsoft.com/en-CA/library/ms188427.aspx https://msdn.microsoft.com/en-CA/library/ms188427.aspx)。我尝试在查询之外使用 id 过滤器运行 Openquery,但运行时间为 4 秒。它比 11 好,但还不是很好:

UPDATE OPENQUERY([server2],'select stuffname, stuffid from database2.dbo.stufftable')
set stuffname=@newstuff
where contactid='4CA1D489-9221-E511-A441-005056C00008'

当然,我使用 exec(@sql) 运行 openquery,但我真的不想那样做。我可以使用文字以这种方式执行整个更新语句,甚至不使用 OPENQUERY 并获得相同类型的结果。

有什么方法可以让我在不使用 exec(@sql) 的情况下修复此性能?


您可以在远程端使用 sp_executesql 将动态 SQL 与参数结合使用。

declare @SQL nvarchar(max);

set @SQL = 'UPDATE database2.dbo.Stuff
            SET stuffname=@newstuff
            WHERE stuffId=''4893CD93-08B3-4981-851B-5DC972288290'''

exec [server2].master.dbo.sp_executesql @SQL, N'@newstuff nvarchar(64)', @newstuff
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用变量与文字时远程查询速度很慢 的相关文章

  • 如何在分层类别树中找到我的节点及其祖先的所有兄弟节点?

    这是我的桌子 CREATE TABLE IF NOT EXISTS Category Name varchar 25 NOT NULL lft INT UNSIGNED NOT NULL rgt INT UNSIGNED NOT NULL
  • 使用 LIMIT/OFFSET 运行查询并获取总行数

    出于分页目的 我需要使用以下命令运行查询LIMIT and OFFSET条款 但我还需要计算该查询将返回的行数 而不需要LIMIT and OFFSET条款 我想运行 SELECT FROM table WHERE whatever ORD
  • 在 Sql Server 中启用 DTD 支持

    我有各种 xml 文档需要存储在数据库列中 这些文档包含对 DTD 的引用 并且 SQL Server 不会导入 xml 因为它存在安全风险 如何在数据库上启用 DTD 支持 以便它可以让我插入 xml 内容 你必须CONVERT首先 MS
  • MySql 复合索引

    我们使用 MySql 作为我们的数据库 以下查询在 mysql 表 大约 2500 万条记录 上运行 我在这里粘贴了两个查询 查询运行得太慢 我想知道更好的复合索引是否可以改善这种情况 你知道最好的综合指数是什么吗 并建议我这些查询是否需要
  • 如何使用 SQL - INSERT...ON DUPLICATE KEY UPDATE?

    我有一个脚本可以捕获推文并将其放入数据库中 我将在 cronjob 上运行脚本 然后在我的网站上显示数据库中的推文 以防止达到 Twitter API 的限制 所以我不想在我的数据库中有重复的推文 我知道我可以使用 INSERT ON DU
  • 使用 MVC5、Ajax、C# 和 MSSQL Server 级联 DropdownList

    我对来自 Windows 窗体和三层架构的 MVC 非常陌生 我试图找出使用从数据库填充的级联下拉列表 DDL 我使用 MS SQL Server 2012 VS 2013 目前我正在研究用户调查问卷 用户可以从 DDL 的多个答案中进行选
  • 如何限制mySQL中的搜索和替换字符串

    我用它来搜索和替换 mySQL 中的字符串 UPDATE products SET prodname REPLACE prodname S S 这些产品包含诸如 TYLENOL TABS 100 S 之类的字符串 我想将其转换为 TYLEN
  • SSIS Excel 文件问题 - 创建文件失败

    我有 SSIS 包 可以抓取 excel 文件并将其加载到 sql 表中 运行它时出现以下错误 我尝试将 64 位运行设置为 false 那不起作用 我还安装了 64 位访问驱动程序引擎 这也没有帮助 数据流任务 Excel 源 2 出错
  • MySQL创建表中的日期格式

    我必须使用 MySql 创建一个表 它可以按以下格式存储日期 我尝试过如下 CREATE TABLE birth date DATE 但它不起作用 因为日期格式是 YYYY MM DD 我该怎么办 谢谢 MySQL 或几乎任何其他数据库 中
  • SQL Server 2008 中的 FREETEXT 查询不进行短语匹配

    我在 SQL Server 2008 中有一个全文索引表 我正在尝试使用 FULLTEXT 查询精确的短语匹配 我不认为使用 CONTAINS 或 LIKE 适合于此 因为在其他情况下查询可能不准确 用户没有用双引号括起短语 并且一般来说我
  • MySQL如何在没有过程/函数的情况下执行命令块

    我尝试在 MySQL Workbench 上运行一段 SQL 命令 就像在 SQL Server 上一样 但它告诉我 声明在此位置无效 我在网上看到了各种这样的例子 我真的不明白为什么会出现这个错误 一些提示 代码 其中 SQL Serve
  • T-SQL 问题:查询 XML

    任何人都可以告诉我如何从这些数据生成 DATA Key ParentKey 5 NULL 25 5 33 25 26 5 27 5 34 27 28 5 29 5 这个 XML 结果 RESULTS
  • 如何检查Azure SQL数据库中是否已存在数据库用户

    我的新客户计划使用 Azure 托管 SQL 数据库服务 我正在使用 dacpac 来部署数据库 在 dacpac 中 我有一个部署后脚本 用于创建 sql 用户 如下所示 IF NOT EXISTS SELECT name FROM sy
  • MYSQL 中当前行上日期之前(并包括该日期)的所有行的总和

    重要的是要知道在查询期间日期是未知的 因此我不能只硬编码 WHERE 子句 这是我的桌子 Date ID Customer Order Count 20150101 Jones 6 20150102 Jones 4 20150103 Jon
  • SQL 用随机数据填充表

    我有一个包含两个字段的表 id UUID 是主键并且 描述 var255 我想用SQL语句插入随机数据 我希望这个描述是随机的 PS 我正在使用 PostgreSQL 我不确定这是否符合 随机描述 的要求 也不清楚您是否想要生成完整的数据
  • SQL Server 2005 Reporting Services:如何计算不为空的行?有计算总数的提示吗?

    在 SQL Server 2005 中使用报表服务 有没有办法只计算不为空的记录 类似于 Excel 中的 COUNTA 我认为这将是一个非常简单的过程 但我尝试过的都没有成功 例如 我尝试使用以下表达式来表示 Completed 这是我要
  • 如何使用jdbc驱动编写事务?

    我想使用 jdbc 编写一个事务java 我尝试过这个简单的交易 BEGIN TRANSACTION NL GO NL UPDATE table SET col test where id 1010 NL GO NL COMMIT 我尝试过
  • INSERT 失败,因为以下 SET 选项设置不正确:“QUOTED_IDENTIFIER”

    在执行存储过程时 我们有时会收到以下消息 之后无需任何更改 删除并重新执行存储过程 它就可以正常工作 DBCORE INSERT 失败 因为以下 SET 选项设置不正确 QUOTED IDENTIFIER 验证 SET 选项是否正确用于索引
  • 用于选择项目/属性列表中具有多个属性的项目的 SQL 语句是什么?

    假设我有一个表 其中列出的项目和属性如下 frog green cat furry frog nice cat 4 legs frog 4 legs 我想从项目列中选择同时具有绿色和 4 条腿属性的唯一对象 在这种情况下 我希望只返回青蛙对
  • 针对 SqlClient 的 getschema("foreignkeys") 未产生足够的信息

    我需要两个表和两组字段 而不是外键名称和其中一个表名称 有谁知道如何查询SQL Server完整的外键信息 谢谢 这可能是一项复杂的冒险 GetSchema 和 INFORMATION SCHEMA 视图不完整 导致需要直接查询 sys 视

随机推荐

  • 无法正确获取 UISwipeGestureRecognizer 方向

    我正在编写代码以在视图上向上或向下移动两根手指以更改某些状态 代码如下 UISwipeGestureRecognizer aSwipeGesture UISwipeGestureRecognizer alloc initWithTarget
  • flash和跨域问题

    我正在运行一个rails3项目 其中包含所有javascript 图像 swfs等的外部资产主机 这是在一个完全不同的域上 所以知道我尝试使用 swfobject 嵌入一些 SWF 在开发中 同一主机 一切正常 但在生产中 不同主机 它不会
  • Pygame Mixer.music 无法读取 mp3 流

    我正在尝试用 Python 制作自己的音乐播放器 在考虑了替代方案之后 我决定使用 pygame 的 Mixer music 来实际播放音频 我以前使用过 pygame 通常用于实际游戏 我一直在寻找 Playsound 直到我意识到我需要
  • Vaadin 14,6 AppLayout 与状态栏?

    我很高兴使用该标准Vaadin AppLayout 组件 https vaadin com components vaadin app layout 作为我的应用程序的布局起点 现在我收到了添加状态栏的要求 状态栏必须与导航栏具有相同的宽度
  • 使用 DTO 和 WPF 时是否需要实现 INotifyPropertyChanged?

    我的问题相当简单 标题中已经提出了 上下文如下 我有一个包含实体和存储库的域 查询的结果被映射到 DTO 并发送到 GUI GUI 是使用 WPF 实现的 对于映射 我需要实现 INotifyPropertyChanged 的 类 我的第一
  • C++ 中的 Unicode 到 UTF-8

    我搜索了很多 但找不到任何东西 unsigned int unicodeChar 0x5e9 unsigned int utf8Char uni2utf8 unicodeChar utf8Char assert utf8Char 0xd7a
  • PluginRegistry无法转换为FlutterEngine

    当我将 flutter 更新到版本 1 12 13 时 我发现了这个问题并且无法修复它 我按照发送的 firebase messaging 教程进行操作并收到以下错误 错误 类型不兼容 PluginRegistry 无法转换为 Flutte
  • 覆盖应用程序根 URL 的真正作用是什么?

    整个互联网上我唯一能找到解释的地方是MSDN https msdn microsoft com en us library aa983445 aspx 指定应用程序根 URL 的备用路径 用这个 如果 Web 应用程序根目录不是您的项目的根
  • 在 iText PDF 文档中安装 JTable

    我有一个JTable有四列 我正在使用 iText 库打印包含 JTable 数据的 PDF 文档 问题是 JTable 在 PDF 中无法正确显示 我在谷歌上搜索并发现这里同样的情况 http tiku io questions 4204
  • Arrays.asList(...).contains(...) 如何工作?

    我有以下代码 String weekEnds 0 6 for int i 0 i lt 7 i if Arrays asList weekEnds contains i System out println I am in the arra
  • 如何标准化 SVG 路径数据(跨浏览器)?

    我试图找到一种方法来实现跨浏览器路径标准化器 有一种描述的本地方式here http www w3 org TR SVG paths html svg SVGAnimatedPathData normalizedPathSegList功能示
  • SwiftUI 覆盖详细视图中的导航栏外观

    我有一个超级简单的 SwiftUI 主从应用程序 import SwiftUI struct ContentView View State private var imageNames String var body some View N
  • Maven部署打包并上传到AWS-Lambda

    我在将 Maven 部署包上传到 Amazon s3 时遇到问题 从 Eclipse 中 我能够成功生成 jar 文件 但是在上传到服务器时遇到问题 这是我的Java代码 package main java mavantestproj im
  • XSD 转 UML 命令行工具

    我想知道 是否有人遇到过任何命令行工具 优先免费 用于将 xml 模式 xsd 转换为 UML 图 xsd 用于表示类 因此 UML 类图就适合该目的 我对命令行工具更感兴趣 因为我想让它成为一个自动任务 因此我宁愿不必打开 UI 来执行它
  • DateTime.UtcNow 和 DateTime.Now.ToUniversalTime() 之间有什么区别

    对我来说它们都是一样的 UtcNow 只是一个快捷方式吗 事实上恰恰相反 这Now属性实现为 public static DateTime Now get return UtcNow ToLocalTime
  • 使用文档字符串和“未实现”异常预填充 Eclipse 和 Pydev 中的新函数

    我正在使用 Eclipse 和 Pydev 编辑 Python 源代码 我想记录我的所有函数 并在函数尚未实现时引发 未实现 异常 例如当我输入 def foo bar1 bar2 输入时 我希望它自动完成 def foo bar1 bar
  • 在 Vim 中控制选项卡名称

    在 MacVim 中 选项卡的名称似乎设置为该选项卡中最近打开的缓冲区的名称 这会在使用拆分时造成混乱 如何将选项卡名称固定到选项卡中的左上角窗口 以下函数返回左上角窗口中加载的缓冲区的名称 function GuiTabLabel ret
  • 碰撞后立即停止刚体运动/旋转

    我希望我的球体从一个位置跳到另一个位置 但不希望它随后平移 我不知道该怎么做 这是我的代码 void Update if thrown Input touchCount gt 0 Input GetTouch 0 phase TouchPh
  • 加入一组具有超时的 python 进程

    我正在使用 python 的多处理库来创建多个进程 from multiprocessing import Process processes Process target function for function in FUNCTION
  • 使用变量与文字时远程查询速度很慢

    我到处寻找这种情况 但找不到解决方案除了动态 SQL 我不想使用它 这是我想要在服务器 2 上更新的表 Stuff Id UNIQUEIDENTIFIER stuffname NVARCHAR 64 我需要从服务器 1 更新它 所以我一直在