签到成功

知道了

CNDBA社区CNDBA社区

子查询和关联查询的区别

2021-12-01 22:28 1628 0 原创 mysql
作者: hbhe0316

子查询就是查询中又嵌套的查询,表连接都可以用子查询,但不是所有子查询都能用表连接替换,子查询比较灵活,方便,形式多样,适合用于作为查询的筛选条件,而表连接更适合与查看多表的数据。
子查询不一定需要两个表有关联字段,而连接查询必须有字段关联(所谓的主外键关系)
1,表关联的效率要高于子查询,因为子查询走的是笛卡尔积
2,表关联可能有多条记录,子查询只有一条记录,如果需要唯一的列,最好走子查询http://www.cndba.cn/hbhe0316/article/22662http://www.cndba.cn/hbhe0316/article/22662http://www.cndba.cn/hbhe0316/article/22662

对于数据量多的肯定是用连接查询快些,原因:因为子查询会多次遍历所有的数据(视你的子查询的层次而定),而连接查询只会遍历一次。

http://www.cndba.cn/hbhe0316/article/22662

但是数据量少的话也就无所谓是连接查询还是子查询,视自己的习惯而定。一般情况下还是用子查询来的好,容易控制。http://www.cndba.cn/hbhe0316/article/22662http://www.cndba.cn/hbhe0316/article/22662

http://www.cndba.cn/hbhe0316/article/22662
http://www.cndba.cn/hbhe0316/article/22662

执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。
优化方式:
可以使用连接查询(JOIN)代替子查询,连接查询不需要建立临时表,因此其速度比子查询快。
子查询和关联查询的效率问题
MSDN对子查询的定义是这样的:
可以将一个查询的结果用作另一个查询的输入。可以将子查询的结果用作使用 IN( ) 函数、EXISTS 运算符或 FROM 子句的语句。

http://www.cndba.cn/hbhe0316/article/22662
http://www.cndba.cn/hbhe0316/article/22662

版权声明:本文为博主原创文章,未经博主允许不得转载。

MYSQL

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
hbhe0316

hbhe0316

关注

1.只有承认无知,才能装下新的东西; 2.进步来自一点点滴滴的积累; 3.广博让你更优秀,而专业让你无法替代; 4.挫折和失败能够转换为一种财富。

  • 889
    原创
  • 1
    翻译
  • 13
    转载
  • 24
    评论
  • 访问:1144275次
  • 积分:1523
  • 等级:核心会员
  • 排名:第6名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ