断言它JOIN比LEFT JOIN在某些情况下涉及某些WHERE子句的情况更好,因为它不会混淆查询计划程序,并且不是“毫无意义的”。断言/假设是任何人都应该显而易见的。
请进一步说明或提供链接以供进一步阅读。
实际上,WHERE条件和JOIN条件[INNER] JOIN在PostgreSQL中是100%等效的。(不过,使用显式JOIN条件使查询更易于阅读和维护是一种很好的做法)。
同样是不正确的LEFT JOIN使用相结合WHERE上表条件的参与权。a的目的LEFT JOIN是保留联接左侧的所有行,而不管右侧是否匹配。如果未找到匹配项,则在行NULL的右侧扩展列的值。手册:
LEFT OUTER JOIN
首先,执行内部联接。然后,对于T1中不满足与T2中任何行的联接条件的每一行,将在T2的列中添加具有空值的联接行。因此,对于T1中的每一行,联接表始终至少具有一行。
如果然后WHERE在右侧的表列上应用条件,则会使效果无效并强制将其转换LEFT JOIN为普通格式,JOIN因为查询计划更加复杂,因此成本更高。
在具有许多联接表的查询中,很难使用Postgres(或任何RDBMS)来找到最佳(甚至是好的)查询计划。联接表的理论上可能的序列数会因数增加(!)。Postgres使用“通用查询优化器”来完成任务,并且有一些设置可以影响它。
如前所述,用误导LEFT JOIN来混淆查询,会使查询计划者的工作更加困难,对人类读者来说是误导,并且通常暗示查询逻辑中的错误。