当前位置: 首页 > 面试题库 >

哪个更快:关联子查询还是联接?

司马高韵
2023-03-14
问题内容

我知道我们可以进行相关的子查询并加入。但是哪一个更快?有黄金法则还是我必须同时衡量这两者?


问题答案:

首先,相关子查询实际上是联接的一种。关于哪一个产生最佳执行计划没有黄金法则。如果您对性能感兴趣,则需要尝试不同的表格以查看最有效的方法。或者,至少,看看执行该决定的执行计划。

通常,出于两个原因,我倾向于避免关联子查询。首先,几乎总是可以在没有相关性的情况下编写它们。其次,许多查询引擎将它们转换为嵌套循环联接(尽管使用索引),而其他联接策略可能更好。在这种情况下,相关子查询使并行查询变得困难。第三,关联的子查询通常在SELECT或WHERE子句中使用。我希望所有表都位于FROM子句中。

但是,在MySQL中,关联子查询通常是执行查询的 有效方法。在IN子句中使用子查询时尤其如此。因此,没有黄金法则。



 类似资料:
  • 问题内容: 我有两个包含“任务”和“注释”的表,并且想要检索一个任务列表,以及每个任务的关联注释数。这两个查询可以完成任务: 它们之间有区别吗?我应该在一个之上使用另一个,还是它们只是完成同一工作的两种方式?谢谢。 问题答案: 在小型数据集上,当涉及到性能时,它们会被淘汰。索引时,LOJ会好一些。 我发现在大型数据集上,内部联接(内部联接也将起作用。)将在很大的因素(抱歉,没有数字)方面优于子查询

  • 问题内容: 一个旧的系统已经到达我们的办公室进行一些更改和修复,但是它也遭受性能问题的困扰。我们不确切知道这种缓慢性的根源是什么。 在重构旧代码时,我们发现了一些遵循以下模式的sql查询(出于示例目的,对查询进行了简化): 这些查询从它们返回的 每一 列中进行几个内部子查询。 我们计划按照以下模式重写这些查询: 使用内部联接,它们 更易于阅读和理解 ,但是真的更快吗?这是写它们的更好的方法吗?不幸

  • 简介 Cabal-DB 的关联数据查询主要用了两个方法:->has('table') 和->belongs('table'), 因为其实数据库关联关系只有两种,一种是拥有(has)另一种是属于(belongs),如: 用户拥有更多个文章 文章拥有多个标签 文章属于一个用户 文章标签关联记录属于一个标签和一篇文章 语法 拥有关系查询语法: $row->has($name, $foreignKeyOr

  • 问题内容: RDBMS(或数据库理论)中“关系”与“关系”的定义是什么? 更新: 对我的问题的评论让我有些困惑: “关系是表的同义词,因此在计算机中存储的模式方面具有非常精确的含义” Update2: 如果我以关系数据库管理系统(RDBMS)的方式错误地回答了该问题,则该关系已写成一侧方向单数连接-依赖关系, 即从一个表到另一表,而关系暗示(不一定明确地)在一个表中有多个链接一个方向(从一张桌子到

  • 问题内容: 如果您的目标是测试MySQL列中是否存在字符串(类型为’varchar’,’text’,’blob’等),那么以下哪一项是更快/更有效/更好地使用,为什么? 或者,还有其他方法可以胜任这些方法吗? 与 问题答案: 正如kibibu在上述评论中指出的,FULLTEXT搜索绝对会更快。 但是 : 在我的测试中,它们的表现完全相同。它们都不区分大小写,并且通常会执行全表扫描,这在处理高性能M

  • 问题内容: 对于开发人员何时使用联接而不是子查询是否有经验法则还是相同的? 问题答案: 取决于RDBMS。您应该比较两个查询的执行计划。 根据我对Oracle 10和11的经验,执行计划始终是相同的。