使用联接查询的最佳方法是什么?
conditions
例如,下列哪一个查询具有更好的性能?
select * from person persons
inner join role roles on roles.person_id_fk = persons.id_pk
where roles.deleted is null或
select * from person persons
inner join (select * from role roles where roles.deleted is null) as roles
on roles.person_id_fk = persons.id_pk 发布于 2020-08-05 12:04:15
在一个不错的数据库中,这两个查询之间应该没有区别。记住,SQL是一种描述性语言,而不是一种过程语言。也就是说,SQL SELECT语句描述应该返回的结果集。它没有指定创建它的步骤。
两个查询在语义上是等价的,SQL优化器应该能够识别这一点。
当然,SQL优化器并不是无所不知的。因此,有时您编写查询的方式确实会影响执行计划。但是,您所描述的查询被转化为没有“子查询”概念的执行计划,因此它们产生相同的执行计划是合理的。
注意:一些数据库--比如MySQL和MS -没有很好的优化器,而这样的查询确实产生了不同的执行计划。天哪。
https://stackoverflow.com/questions/63258712
复制相似问题