zoukankan      html  css  js  c++  java
  • 数据库子查询和join的比较

    子查询进行SELECT语句嵌套查询,可以一次完成很多逻辑上需要多个步骤才能完成的SQL操作。子查询虽然很灵活,但是执行效率并不高。

    select goods_id,goods_name from goods where goods_id = (select max(goods_id) from goods);
    执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。

    可以使用连接查询(JOIN)代替子查询,连接查询不需要建立临时表,因此其速度比子查询快。

    https://segmentfault.com/q/1010000000134455

    对于mysql,从来都不推荐使用子查询和join。因为本身join的效率就是硬伤,一旦数据量上去效率很难保证,强烈推荐分别根据索引单表取数据,然后在程序里面做join,merge数据。

    http://m.zhizuobiao.com/mysql/mysql-18030500052/

    互联网公司mysql数据库不要使用join,建议service层采用in等子查询解决方法

    互联网公司的业务,往往是并发场景多,DB查询频繁,有一定用户规模后,往往要做分库分表。

    阿拉巴巴的淘宝网,是从oracle迁移到mysql。原因是mysql免费,开源。互联网公司起步阶段都穷,往往要采用mysql。oracle太贵了,适合不差钱的行业,如金融,证券,军工,国企,制造业。oracle是RDBMS的NO1,多年数据库技术积累,很多方面强于mysql。

    互联网行业,业务请求量大,整个架构,数据库是最底层的,瓶颈往往是数据库。建议数据库只是作为数据store的工具,而不要添加业务上去。

    不使用join的原因: 

    1.DB承担的业务压力大,能减少负担就减少。当表处于百万级别后,join导致性能下降; 

    2.分布式的分库分表。这种时候是不建议跨库join的。目前mysql的分布式中间件,跨库join表现不良。 

    3.修改表的schema,单表查询的修改比较容易,join写的sql语句要修改,不容易发现,成本比较大,当系统比较大时,不好维护。

    不使用join的解决方法: 

    在业务层,单表查询出数据后,作为条件给下一个单表查询。也就是子查询。 

    会担心子查询出来的结果集太多。mysql对in的数量没有限制,mysql限制整条sql语句的大小。通过调整参数max_allowed_packet ,可以修改一条sql的最大值。建议在业务上做好处理,限制一次查询出来的结果集是能接受的。

  • 相关阅读:
    mysql生成百万级数量测试数据
    记2017深圳寻找工作
    好朋友的小姨,希望一起帮助下度过难关,方便的话请帮忙转发一下,谢谢。————————心情记录
    shell变量
    什么是Shell
    Windows环境下的安装gcc
    make
    gdb
    gcc
    数据库编程
  • 原文地址:https://www.cnblogs.com/fxl-njfu/p/10444171.html
Copyright © 2011-2022 走看看