假设我有一个自连接查询,其结果与内连接的结果完全相同,就像它们用于外连接一样。在这种情况下,是否比另一个更高效,或者它是否因查询优化器的作用而异?
通常情况下,我希望LOJ的性能较差,因为它必须完成INNER JOIN的所有工作以及对结果进行空值扩展的额外工作。但如果不需要额外的工作,理论上的表现是否应该相同?我自己试过这个,但是没有注意到任何一致的性能差异,但是想在这里问一下。
答案 0 :(得分:2)
回答问题的正确方法是对系统上的数据运行查询。
通常,外连接的效果只是减少优化器可以做出的选择。如果是这种情况,那么可能会使用基本相同的查询计划 - 并且查询是相同的
当然,效果可能会更加戏剧化。使用外连接时,生成的查询计划会更糟糕。
答案 1 :(得分:0)
什么理论?符号的理论对性能没有任何说法。 "理论"对于某些假设的实现,取决于假设的实现,大致可以分为逻辑(查询重写)和显式(索引)&隐式(其他)物理(实现)方面。现实是由实际实施的那些方面(保证或其他方面)粗略引导的。最终,我们必须测量估计/典型/实际负载&数据 - 性能混乱,环境的微小变化可以使结果发生很大变化。
但是,如果你宣布约束,那么整个事情都没有实际意义。你知道内心和外在的外部联接是相同的,然后DBMS极有可能也知道,如果不是,那么极其可能无论如何都要做相同数量的工作。
此外,与实际完成的工作相比,所涉及的差异将是微不足道的。整本书总体上等待重新优化,特别是DBMS。
给出支持以下猜想的论据:
•如果n> = 10,初始化矩阵所需的时间不是很重要 •如果n <10,则初始化矩阵所需的时间不是很重要 - 指向思考1.1,第1章(简介),重新规则1,&#34;写得清楚 - 不要太聪明&#34;,经典,Kernihan编程风格元素&amp; Plauger(1974)