![]() |
1
5
首先,你可以去掉第二个左连接。 你在哪里把火柴拿走了,不管怎样…例如,如果s.orderid为1,并且存在值为1的r.orderid,则where中的is null强制不允许它。所以它只会返回s.orderid为空的记录,如果我读得正确的话… 其次,如果处理大量数据,添加nolock表提示通常不会有什么影响。假设你不介意在这里或那里读到脏东西的可能性,那么-p通常值得冒这个险。
最后,你的问题有一部分我不太清楚…
好啊。。。但是,您是否试图将其限制在那些大型机表记录不存在的地方?如果是这样的话,你也希望在where中表达出来,对吧?所以像这样的事情…
如果这就是您对原始语句的意图,也许您可以去掉s.orderid is空检查? |
![]() |
2
1
在开始更改查询之前,应该确保所有表都有一个聚集索引,该索引对该查询和所有其他重要查询都有意义。在您的表上有聚集索引在sql server中是确保正确性能的关键。 |
![]() |
3
1
这没有道理:
如果
你确定你发布的代码是正确的吗? |
![]() |
4
1
除了kasperjj所建议的(我确实同意应该是第一个),您还可以考虑使用临时表来限制数据量。现在,我知道了,我知道每个人都说离临时工桌远点。而我 通常 但有时,值得尝试一下,因为您可以使用此方法大幅缩减连接的数据量;这会使整个查询更快。(当然,这取决于可以缩小多少结果集。) 我的最后一个想法是,有时您只需要尝试使用不同的方法组合查询。这里可能有太多的变量,任何人都无法给出答案……另一方面,这里的人很聪明,所以我可能错了。 祝你好运! 当做, 弗兰克 ps:我忘了提到,如果您想尝试这个临时表方法,还需要在临时表上尝试不同的索引和主键。根据数据量的不同,索引和pks可以提供帮助。 |
![]() |
5
1
索引所有的表将是重要的。如果对连接中使用的[Mainframe]列的索引做不了什么,也可以通过指定日期范围预先限制要在[Mainframe]中搜索的行(和[Rejected],尽管它看起来已经有一个主键),如果日期窗口应该大致相似。这可以减少右手边的连接。
我还将查看执行计划,并对您的
您可以在几天或几个月内使用m.entrydate。但是,如果大型机上已经有了索引,那么问题是为什么不使用索引,或者如果正在使用索引,那么性能为什么会如此缓慢。 |
![]() |
6
1
尝试改变 在r.orderid=s.orderid上使用(nolock)的左联接[拒绝的]r 进入右合并联接:
|
![]() |
7
0
更新:
我还有一些统计更新:通过严格限制与
原始运行的执行计划显示在
|
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 5 月前 |
![]() |
Marc Guillot · 记录值时忽略冲突 6 月前 |
![]() |
Fachry Dzaky · 正确使用ROW_NUMBER 6 月前 |
![]() |
TriumphTruth · 从满足特定条件的数据集中选择1行 6 月前 |