连接与子查询

我是一个老派的MySQL用户,总是喜欢JOIN而不是sub-query。但是现在每个人都使用子查询,我讨厌它;我不知道为什么

我缺乏理论知识来判断是否存在差异。子查询是否与连接一样好,因此无需担心

子查询是解决形式为“从A获取事实,以从B获取事实为条件”的问题的逻辑正确的方法。在这种情况下,在子查询中使用B比使用联接更有逻辑意义。从实际意义上讲,它也更安全,因为你不必因为与B的多次匹配而对从a获得重复的事实持谨慎态度

然而,实际上,答案通常取决于性能。一些优化程序在给定联接与子查询时会吸取柠檬,而另一些优化程序则会以另一种方式吸取柠檬,这是特定于优化程序、特定于DBMS版本和特定于查询的

从历史上看,显式连接通常是成功的,因此公认的连接更好,但乐观主义者一直在变得更好,因此我更喜欢先以逻辑一致的方式编写查询,然后在性能限制允许的情况下重新构造查询

发表评论