【问题标题】:Nested Loop Algorithm - How indexes improve it?嵌套循环算法 - 索引如何改进它?
【发布时间】:2020-12-06 23:47:33
【问题描述】:

我正在研究嵌套循环算法如何用于 SQL 中的连接,但无法理解索引如何提高其性能。据我了解,该算法与任何标准的嵌套 FOR 循环都非常相似,由于两个表中的所有行都必须循环,因此如何对其中一个表进行索引?

我是一名新晋工程师,由于我最近引入的低效联接,我对数据库优化的兴趣在一次生产事件后达到了顶峰。任何深入研究此问题的资源将不胜感激!

提前致谢

【问题讨论】:

  • 我建议为特定的数据库类型添加一个额外的标签。即 sql-server、mysql 等

标签: mysql sql join query-optimization nested-loops


【解决方案1】:

“嵌套循环”——严格来说——是指嵌套的两个循环,也就是你所描述的。

有时,内部循环被索引查找替换,这是 O(log n) 而不是 O(n)。我真的不认为这是一个嵌套循环连接。但是,在某些数据库中,解释计划仍将其显示为嵌套循环。

【讨论】:

  • 这是否意味着在这个算法中只能使用两个表之一的索引?如果是这样,我们是否有任何优化可以使用两个表的索引?
  • @bingoer 。 . .我认为当一个“嵌套循环”出现在一个带有索引查找的解释计划中时,那么只有一个索引被使用。如果同时使用两个索引,它应该是某种“合并”连接。
【解决方案2】:

他们不是。这里的诀窍是:

因为两个表中的所有行都必须循环遍历?

如果是这样,则没有索引改进。

但是,如果表 a 上的循环在表 b 上执行 LOOKUP,则它根本不需要遍历第二个表 - 它遍历一个表,然后查找第二个表。索引可以提供哪些帮助。

【讨论】:

    猜你喜欢
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2017-05-27
    • 1970-01-01
    相关资源
    最近更新 更多