• SQL的嵌套查询与连接查询


    1.嵌套查询连接查询的性能

      连接查询一般较快子查询很难被优化。(当然和DB优化有关,也可能子查询比连接查询快)其实不能一概而论的~~ 不过,问了下DBA同学,他建议是能用join的,尽量不要用嵌套查询。以下内容,部分是来自网上的一些观点,自己稍加整理的。
       子查询是实现关联式计算的一种实例,连接实现了关联式代数。关于关联式计算(relational calculus)和关联式代数(relational algebra),貌似比较数学或者理论性的东西理论,我也还没深入弄明白。
      很多人也说到,这个性能的比较,不能一概而论的,需要具体的每个Case具体分析。
       也有人说(并有在某种DBMS上用一个例子证明),子查询可以也可能被优化为与join一样的执行计划,性能可以一样的。
      说一下概念吧:在一个SELECT语句的WHERE子句或HAVING子句中嵌套另一个SELECT语句的查询称为嵌套查询,又称子查询。一个select...From...Where查询语句块可以嵌套在另一个select...From...Where查询块的Where子句中,称为嵌套查询。外层查询称为父查询,主查询。内层查询称为子查询,从查询。子查询可以嵌套多层,子查询查询到的结果又成为父查询的条件。子查询中不能有order by分组语句。先处理子查询,再处理父查询。 子查询除非能确保内层select只返回一个行的值,否则应在外层where子句中用一个in限定符,即要返回多个值,要用in或者not in哦,所以当在编译过程中出现“子查询只返回一个值”的错误时,就要考虑是不是要用in和not in.

      MySQL从4.1版本开始支持子查询,使用子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然很灵活,但是执行效率并不高。执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。优化方式:可以使用连接查询(JOIN)代替子查询,连接查询不需要建立临时表,因此其速度比子查询快。

  • 相关阅读:
    阻止元素默认行为
    微信小程序--页面的生命周期和参数传递
    微信小程序-查询快递
    小程序-冒泡事件
    SpringMVC-使用、运行流程、配置文件寻找
    OpenCV-安装使用、图像处理
    Spring-AOP:JoinPoint、各种通知、基于XML和注解的AOP、声明式事务
    Spring-AOP:开发准备、初识动态代理、使用步骤、
    Spring-IOC:Bean的作用域、生命周期、XML的装配、注解注入、@Autowired
    Spring-IOC:复杂值注入、各种类型赋值、bean的复用
  • 原文地址:https://www.cnblogs.com/lu97/p/15733953.html
Copyright © 2020-2023  润新知