1
2
我可能已经猜到它们是相同的(有相同的执行计划),因为像a.AdjustDetailid=d.InvoiceDetailid这样的谓词不可能是真的,如果一侧为空…因此,添加is not null条件是多余的。但也许处理器正在用其中的附加谓词执行其他不必要的步骤… 但另一个答案提到的更重要。是否确实需要输出没有匹配记录的所有行(没有调整发票的发票)??如果不改为内部连接,会加速很多。 但是,如果你真的需要他们,你可以尝试联合。
它在不使用外部联接的情况下做同样的事情… (有一个联合的两个查询是否比单个外部联接查询运行得更快,这是个问题…) |
2
5
如果你想让这个查询非常快,你需要
接下来,您需要确保您的统计数据是最新的,以便基于成本的查询优化器能够正常工作。
要更新统计信息,请使用
|
3
1
这个查询中只有一个表,对吗? 如果你使用 选择InvoiceDetail、Fee、Feetax 来自发票详细信息 这将得到所有的行,而不仅仅是调整后的行。 假设您正在进行自连接,并且出于一个好的原因,我将索引invoiceDetailid和adjustDetailid,并查看执行计划使用的索引。 您还可以尝试在索引中“包括”fee和feetax列-如果表真的很宽,这将有很大帮助。 |
4
1
对于您的疑问,我可以考虑3种不同的合理执行计划:
也许添加非空条件会使优化器选择另一个计划,这很难说。 |
S. Jacson · 任意两台发电机的速度差(内置功能) 2 年前 |
Sadeq Dousti · 相当于“嵌套删除”的执行性能SQL查询 2 年前 |
Prince · 复制大型文件需要更多时间 2 年前 |
Sagar · 为什么在循环之外声明变量会更快? 2 年前 |
seco · 如何在不挂起页面的情况下加载JS 2 年前 |