|
|
1
5
根据我的经验,查询越复杂,SQL优化器创建灵活计划的能力就越弱。这里有16个连接,一些或大部分是外部连接,至少有一个子查询。。。投入足够多的索引、基数、视图、外部应用程序,谁知道还有什么,没有人,甚至连微软的工程师*都无法找出能够统一、定期地生成最佳计划的例程。 正如你所描述的,我经历过无数次——在一个混乱的查询中改变一件简单的事情,一切都会快一个数量级(或者,咬牙切齿,慢一点)。我没有办法确定什么时候复杂太复杂,这更像是一种感觉。我的一般经验法则是,如果它看起来太长或太复杂,请简化您可以简化的地方—例如预先选择的单个嵌套值,或者分解查询的一部分 总是 使用一个小的结果集快速运行,首先运行它并将结果存储在临时表中。 (*请注意这是温和的) |
|
|
2
4
作为替代方案,我认为您可以通过以下方式消除子查询:
|
|
|
3
0
我个人认为,如果没有指数,结果也就不足为奇了宠物。名字. 如果在上创建唯一索引宠物。名字你可能会看到更好的结果。如果从服务器的角度看没有索引,子查询可能返回多行或空。也许乐观主义者可以做得更好;它经常需要帮助。 |
|
|
4
0
原因正如您所指出的,根据我的经验,即使是最简单的不相关子查询,也常常由SQLServer的查询优化器重新计算。 例如,您可以查看以下查询的执行计划,并查看是否重新计算了不相关的子查询。
在本例中,在属性“ID”上有或没有聚集索引。正如有人指出的,您可以重写这个查询以使用连接而不是子查询。但是,在许多情况下,如果子查询返回聚合标量,则可以这样做。
那么join重写可能就不那么容易了。 |
|
|
Franz Biberkopf · Oracle:组合子查询和聚合函数 3 年前 |
|
|
Brad · SQL Server错误:子查询返回了多个值 8 年前 |
|
|
Mendelsohn · 代码学院SQL表转换课程 8 年前 |
|
|
Bodhi · SQL:如何使用子查询返回结果? 8 年前 |
|
|
Bohao LI · 如何使用子查询的结果 8 年前 |
|
|
Mohamed A.B · MySQL:我需要hel p子查询 8 年前 |
|
|
Supertracer · 使用alias mysql时出现未知列 8 年前 |