![]() |
1
11
存在字面上的存在是为了检查特定标准的存在。在当前的标准SQL中,它将允许您指定多个比较标准-例如,如果您想知道col_a和col_b何时匹配-这使得它比in子句更强一些。mysql-in支持元组,但语法不可移植,所以exists是可读性和可移植性的更好选择。 与exists一起要注意的另一件事是它如何操作-exists返回一个布尔值,并在第一次匹配时返回一个布尔值。因此,如果您处理的是重复/多个,那么exists的执行速度将比in或join快,这取决于数据和需要。 在in是or子句的句法糖。虽然它非常适合,但在处理该比较的大量值方面存在问题(以北1000)。 不是not运算符只是反转逻辑。 子查询与联接“总是使用连接”这句咒语是有缺陷的,因为如果一个父级存在多个子级记录,则连接会增加结果集的风险。是的,您可以使用distinct或group by来处理这个问题,但这很可能会使使用join moot的性能受益。了解您的数据,以及您对结果集的需求——这些是编写性能良好的SQL的关键。 重申知道何时和为什么要使用左连接是空的,这是MySQL上最快的排除列表。 如果比较的列不可为空 否则不在/不存在是更好的选择。 参考文献: |
![]() |
2
3
它们的工作方式非常不同:
但是,这两种方法都可以用来检查表A中的一行是否在表B中有匹配的行。除非您小心并且知道您在做什么,否则我将在MySQL中避开它,因为它在更复杂的查询中通常会提供更差的性能。使用不存在或左联接…在哪里?为空。 |
![]() |
hello_programmers · Mysql从其他表输出一列 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |
![]() |
Popo · Sql查询:返回数据库中不可用的where条件 1 年前 |
|
Hamdan Nuramdani · 对账单中一周内不同表中的数据求和 1 年前 |
|
Kugelfisch · 用php为数据库加密数据 1 年前 |