|
1
7
连接往往更有效,因为在编写数据库时考虑了集合操作(而连接是集合操作)。 但是,不同数据库的性能、表的结构、表中的数据量以及查询返回的数据量都会有所不同。 如果数据量很小,我将使用像您这样的子查询,而不是联接。 以下是联接的外观:
我不会使用您发布的查询,因为有可能有多个节点记录具有
我会用:
这是更易读还是更容易理解?在这种情况下,这是个人偏好的问题。 |
|
|
2
3
我认为连接更容易理解,而且效率更高。你的案子很简单,所以很可能是个麻烦。以下是我的写作方法:
|
|
|
3
3
数据库中与性能相关的问题的答案是 它取决于 我们在操作中缺少细节。不知道你的具体情况…(因此,这些是一般的经验法则) 连接更好,更容易理解
书面询问与效率无关。* 您编写的查询以及实际运行的查询彼此之间几乎没有关系。编写查询有很多种方法,但获取数据的方法却很少,这取决于查询引擎来决定。这主要与索引有关。可以编写四个看起来完全不同但内部执行相同操作的查询。 (*写一个效率低下的可怕的查询是可能的,但这样做需要一种特殊的疯狂。)
|
|
|
4
2
加入是有趣的:
但是你也可以表达一个没有加入的加入。]
有趣的是,对于这两个查询,SQL Server给出了一个稍微不同的查询计划,而join有一个聚集索引扫描,“join without a join”有一个聚集索引查找,这表明它是 better 至少在这种情况下! |
|
|
5
1
|
|
|
6
1
我看不出你写的有什么问题,如果合适的话,一个好的优化器甚至可以把它改成一个连接。 |
|
|
7
1
此查询在逻辑上等同于一个join if且only if
否则,查询是不等价的:一个联接总是成功的,而如果有更多的联接,子查询将失败。
如果
如果是连接,
如果是子查询,子查询将执行一次并转换为
|
|
|
8
1
最新的mysql 6.x代码将使用 半联接子查询优化 ,使这两个陈述在很大程度上等效: http://forge.mysql.com/worklog/task.php?id=3740 但是,实际上写出来是非常简单的,因为内部连接是默认的连接类型,这样做并不依赖于服务器对其进行优化(因为某些原因,它可能决定不进行优化,也不一定是可移植的)。一切都是平等的,为什么不去:
|
|
|
Johnny T · 基于当前值的SQL合并表[重复] 1 年前 |
|
John D · 需要为NULL或NOT NULL的WHERE子句 1 年前 |
|
ojek · 如何对SQL结果进行分组和编号? 1 年前 |
|
|
senek · 如何在PL/SQL中将选择结果(列)放入数组中 1 年前 |
|
|
Sax · 规范化Google表格(第一步) 1 年前 |
|
|
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 1 年前 |
|
|
Andrus · 如何在sql中查找第二个匹配项 1 年前 |