开发者社区 问答 正文

MySQL 双表联查与单查

请问 MySQL 是双表联查快还是查两次快?

展开
收起
落地花开啦 2016-02-09 00:12:46 2533 分享 版权
2 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    连接的优点是可以用尽可能少的SQL进行查询。简化了应用和数据库之间的IO调用。缺点是如果表设计不好,SQL写得差,会造成数据库大量的内部IO操作,特别是大量没必要的全表扫描。使用这种方式必须要么是确实要读取的数据量非常大,要么是能够通过索引等方式控制住全表扫描的数量。全表扫描在连接情况下的消耗可以说是指数性的升高的。
    单查的缺点是应用和数据库之间的IO调用比较多,损耗了数据库的带宽。但是优点是对原来的被驱动表来说数据是明确的,可以通过大量的索引,特别是主键索引避免全表扫描。
    用哪种没有一定之规。要看读取的数据量、表设计结构、数据库规模、程序设计等多种因素综合考虑。

    2019-07-17 18:40:00
    赞同 展开评论
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.

    需要考虑两个问题

    1. MySQL只支持嵌套循环。 时间会比较长。
    2. 对于云数据库,数据链路较长,RT较高,两次交互的时间是需要考虑的。
      所以判断你的问题,需要关注的是哪部分的开销大,如果数据库本身的运算是时间大头,建议两次查询,如果网络RT是大头,则双表关联快。

    另外,如果你的应用场景有大量的JOIN, 建议用一下PostgreSQL, 支持哈希JOIN和MERGE JOIN,在嵌套循环的LOOP较多时,这两种的查询效率会高很多 。

    2019-07-17 18:40:00
    赞同 展开评论