首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >普通连接与带子查询的联接

问普通连接与带子查询的联接
EN

Stack Overflow用户
提问于 2020-08-05 05:03:24
回答 1查看 51关注 0票数 0

使用联接查询的最佳方法是什么?

conditions

  • First
  1. 首先连接表,然后添加where
  2. 条件,然后使用子查询加入

例如,下列哪一个查询具有更好的性能?

代码语言:javascript
复制
select * from person persons
         inner join role roles on roles.person_id_fk = persons.id_pk 
         where roles.deleted is null

或

代码语言:javascript
复制
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 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-05 12:04:15

在一个不错的数据库中,这两个查询之间应该没有区别。记住,SQL是一种描述性语言,而不是一种过程语言。也就是说,SQL SELECT语句描述应该返回的结果集。它没有指定创建它的步骤。

两个查询在语义上是等价的,SQL优化器应该能够识别这一点。

当然,SQL优化器并不是无所不知的。因此,有时您编写查询的方式确实会影响执行计划。但是,您所描述的查询被转化为没有“子查询”概念的执行计划,因此它们产生相同的执行计划是合理的。

注意:一些数据库--比如MySQL和MS -没有很好的优化器,而这样的查询确实产生了不同的执行计划。天哪。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63258712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档