SQL SERVER 2008 JOIN 提示

2023-11-30

最近,我正在尝试优化这个查询

UPDATE Analytics
SET UserID = x.UserID
FROM Analytics z 
INNER JOIN UserDetail x ON x.UserGUID = z.UserGUID

估计执行计划显示 57% 执行表更新,40% 执行哈希匹配(聚合)。我做了一些窥探,发现了 JOIN 提示的主题。所以我在我的内部连接和 WA-ZHAM 中添加了一个 LOOP 提示!新的执行计划显示 38% 执行在表更新上,58% 执行在索引查找上。

因此,我准备开始对所有查询应用循环提示,直到我谨慎起来。经过一番谷歌搜索后,我意识到 JOIN 提示并没有很好地涵盖在BOL。所以...

  1. 有人可以告诉我为什么对我的所有查询应用循环提示是一个坏主意吗?我在某处读到 LOOP JOIN 是查询优化器的默认 JOIN 方法,但无法验证该语句的有效性?
  2. 什么时候使用 JOIN 提示?当事情发生时,幽灵克星却不在城里?
  3. LOOP、HASH 和 MERGE 提示之间有什么区别? BOL 指出 MERGE 似乎是最慢的,但是每个提示的应用是什么?

感谢您抽出时间并帮助人们!

顺便说一句,我正在运行 SQL Server 2008。上面提到的统计数据是估计的执行计划。


有人可以告诉我为什么对我的所有查询应用循环提示是一个坏主意吗?我在某处读到 LOOP JOIN 是查询优化器的默认 JOIN 方法,但无法验证该语句的有效性?

因为这剥夺了优化器考虑其他更有效方法的机会。

什么时候使用 JOIN 提示?当事情发生时,幽灵克星却不在城里?

当数据分布(优化器做出决策的依据)严重倾斜并且统计数据无法正确表示时。

LOOP、HASH 和 MERGE 提示之间有什么区别? BOL 指出 MERGE 似乎是最慢的,但是每个提示的应用是什么?

这些是不同的算法。

  1. LOOP是嵌套循环:对于外表中的每条记录,在内表中搜索匹配项(使用可用索引)。当两个表中只有一小部分记录满足时最快JOINWHERE状况。

  2. MERGE对两个表进行排序都会按排序顺序遍历它们,跳过不匹配的记录。最快的FULL JOINs 并且当两个记录集都已排序时(来自先前的排序操作或使用索引访问路径时)

  3. HASH在临时存储(内存或tempdb)从其中一个表中搜索并从另一个表中搜索每条记录。如果任一表中的大部分记录与WHERE and JOIN健康)状况。

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

SQL SERVER 2008 JOIN 提示 的相关文章

随机推荐

  • Angular 2 - Typescript 函数与外部 js 库的通信

    Using JavaScript Infovis 工具包作为绘制图形和树的外部库 我需要操作节点的 onClick 方法 以便异步发送 HTTP GET 请求到服务器 并将来自服务器的数据分配给 Angular 服务类的属性和变量 通过使用
  • 将未链接的 Excel 图表粘贴到 Powerpoint

    我目前正在进行一个项目 将 50 多组 Excel 图表传输到 Powerpoint 演示文稿 我正在比较 50 多个项目并制作 50 多个相同的图表 我在 Excel 工作簿中设置的方式是 图表始终是相同的图表 即图表 2 但通过更改唯一
  • 如何获得UCWA和Skype Web SDK的授权?

    我有 Skype for Business 帐户通话 电子邮件受保护 我正在尝试获得授权 我对 lyncdiscover 服务的第一个请求 GET https lyncdiscover shockw4ves onmicrosoft com
  • Sinch SDK - 如何注销用户?

    我正在使用 Sinch SDK 进行即时消息传递 如何注销用户 我有注销用户的按钮 但无法在 Sinch SDK 中实现该功能 他们的文档或示例都没有描述此类功能 sinch客户端没有注销功能 我们认为移动用户是 在线 的 如果您不想接收更
  • 使用 __future__ 还是 future 来编写兼容 python2 和 python3 的代码更好?

    或者在某些特定情况下 其中一种比另一种更好 到目前为止 我所收集到的只是 future 仅适用于 gt 2 6 或 gt 3 3 我当前的代码非常基本 除了使用打印函数调用之外 在 python2 和 3 上运行相同 然而 随着时间的推移
  • Swift 中的宏?

    Swift 目前是否支持宏 或者未来是否计划添加支持 目前我正在分散 Log trace nil function FUNCTION file FILE line LINE 在我的代码的各个地方 在这种情况下 您应该为 宏 参数添加默认值
  • mvtnorm::pmvnorm 的 Rcpp 实现比原始 R 函数慢

    我正在尝试让 pmvnorm 的 Rcpp 版本至少与 R 中的 mvtnorm pmvnorm 一样快 我已经发现https github com zhanxw libMvtnorm并创建了一个带有相关源文件的Rcpp框架包 我添加了以下
  • 子元素点击事件触发父元素点击事件

    假设你有一些这样的代码 div div div div 我不想触发parentDiv当我点击时点击事件childDiv 我怎样才能做到这一点 Updated 另外 这两个事件的执行顺序是怎样的 你需要使用event stopPropagat
  • C strcpy = 未处理的异常:访问冲突写入位置 0x00000000

    我的 strcpy 函数有问题 使用C 这个简单代码 如下 的要点是将字符串从数组复制到指针数组 char string 20 ABCDEFGH 0 char array of pointers 20 now I want to copy
  • Python 中的列表

    python中的List是同质的还是异质的 gt gt gt def a pass gt gt gt lst 1 one 1 one a 1 1 1 True set 1 gt gt gt for each in lst print typ
  • 猫鼬重复键错误与 upsert

    我有重复密钥的问题 找了好久都找不到答案 请帮助我解决这个问题或解释为什么我收到重复的密钥错误 Trace MongoError E11000 duplicate key error collection project monitor i
  • 制作稀疏矩阵时出错

    我面临着一个我不明白的问题 这是建议答案的后续行动here and here 我有两个结构相同的数据集 我创建的一个是代码可以工作的可重现示例 另一个是代码不起作用的真实示例 盯着它几个小时后 我找不到导致错误的原因 下面给出了一个有效的例
  • 如何使用 MockMvc 测试 Spring 控制器方法?

    我正在使用 spring 3 2 0 和 junit 4 这是我需要测试的控制器方法 RequestMapping value Home public ModelAndView returnHome return new ModelAndV
  • 在 Matlab 中通过约束最大化 3x+y

    我需要在 matlab 中最大化方程 3x y 并具有以下约束 2x y 0 我很难弄清楚如何以一种可以将它们与原始方程联系起来的方式加入约束 我是 matlab 新手 很难弄清楚这一点 提前致谢 正如 Franck提到的 你可以一般使用f
  • Oracle 中的字符串聚合:多行合并为单列

    您好 我在 oracle 中有以下字符串聚合函数 CREATE OR REPLACE FUNCTION STRING AGGREGATE i query VARCHAR2 i seperator VARCHAR2 DEFAULT RETUR
  • 在 JavaScript 中将一个项目从一个数组添加到另一个数组之前比较两个数组[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我有两个数组 var addFrom orange banana watermelon lemon peach var addTo pear tangerine grape or
  • C++ 类和相互链接的对象形成一个循环

    我怎样才能实现在C 中形成循环的互锁对象结构 class Foo Bar bar class Bar Foo foo Foo h include
  • 如何从 setTimeout 做出承诺

    这不是一个现实世界的问题 我只是想了解如何创建承诺 我需要了解如何对不返回任何内容的函数做出承诺 例如 setTimeout 假设我有 function async callback setTimeout function callback
  • ASP.NET Boilerplate (Core 2.0 + Angular 5) 免费模板中的 Promise 错误

    我一直在使用 ASP NET Boilerplate 通过使用自定义 API 的 REST API 客户端 如 Postman 对数据库进行 CRUD 操作 到目前为止 它运行得很好 但是当我继续到前端部分时 有未处理的异常使用管理员帐户登
  • SQL SERVER 2008 JOIN 提示

    最近 我正在尝试优化这个查询 UPDATE Analytics SET UserID x UserID FROM Analytics z INNER JOIN UserDetail x ON x UserGUID z UserGUID 估计