![]() |
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中避开它,因为它在更复杂的查询中通常会提供更差的性能。使用不存在或左联接…在哪里?为空。 |
![]() |
blogger13 · 视频租赁店数据库的规范化 4 月前 |
![]() |
ì¤ì¤í · 为什么LEFT INNER JOIN被弃用? 5 月前 |
![]() |
relatively_random · 确保两个表之间一致的共同参考 6 月前 |
|
Grenish Rai · Firestore错误“用户文档不存在” 9 月前 |
![]() |
Saijo-Shi · PLpgsql中的更新触发器 9 月前 |
![]() |
Dante · Django::配置不当:池不支持持久连接 9 月前 |
![]() |
YouLocalRUser · 删除重复行,保留第一行 11 月前 |