哪个查询更高效?

问题描述:

假设我有一个自连接查询,其结果对于内连接的结果与外连接的结果完全相同。在这种情况下,是否比另一个更具性能,还是因查询优化器的作用而异?哪个查询更高效?

通常我会期望LOJ的性能较差,因为它必须完成INNER JOIN的所有工作以及对结果进行空值扩展的额外工作。但如果不需要额外的工作,理论上的表现应该如何?我自己尝试过,但没有注意到任何一致的性能差异,但是想在这里问一下确定。

+1

你可以在花时间测试它。 – Strawberry

回答您的问题的正确方法是对您的系统上的数据运行查询。

通常,外连接的效果只是简化优化器可以做出的选择。如果是这种情况,则可以使用基本相同的查询计划 - 并且查询是相同的

当然,效果可能更戏剧化。结果查询计划可能会更加糟糕,外连接。

什么理论?符号理论对于性能没有任何可说的。对于某些假设实现的“理论”取决于该假设实现,其大致可以分为显式(索引)&隐式(其他)物理(实现)方面的逻辑(查询重写)&。实际情况由实际实施的那些方面(保证或其他方面)粗略地指导。最终我们必须测量估计的/典型的/实际的负载数据 - 性能是混乱的,情况的一个小的变化会导致结果的巨大变化。

整个事情是没有实际意义,虽然,因为如果你声明&你知道内&外连接相同的约束,则DBMS极有可能也知道,如果没有,那么极有可能做的工作相同数量的反正。

此外,与实际完成的工作相比,所涉及的差异将是微不足道的。整本书都在等待重新优化,特别是针对DBMS。

提供论据支持以下猜想:
•如果n> = 10,初始化一个矩阵所需要的时间不是很重要
•如果n < 10,所需的时间来初始化矩阵不是很重要
- 第1章(介绍),重点第1条,“清楚地写 - 不要太聪明”,经典,Kernihan的编程风格元素& Plauger(1974)