联表查询与多sql语句查询的权衡取舍?

情景

  1. 实现一个查询功能可以使用一条联表查询sql语句来查出所有的结果
  2. 也可以对 n 条sql语句的查询结果拼凑实现
多sql语句会有网络通讯时间损耗,联表查询会有查询时间过长的损耗

问题

  1. 联表查询与多sql查询的性能差距,以及导致差距的原因
  2. 怎么权衡这两者的损耗?即何时会使用联表查询,何时会使用多sql查询?
  3. 实际开发中推荐哪种方式?
阅读 2.5k
1 个回答

这个问题其实问得很大,所以答起来也很困难,而且各家情况不同,数据库的数据量,是否使用缓存等也影响着这个问题的答案。
所以以下回答,都基于我现在的使用场景,实际情况可能互有不同。

联表查询在数据量较为庞大的情况下,受限于数据库的性能,其效率一定程度上是不如单表查询的。
首先,因为对数据库进行读写时,数据库本身是有锁机制的,联表查询会增加锁竞争消耗的时间。其次,查询缓存,如果你将一定的数据放入了缓存,联表查询会放弃这部分缓存的使用,效率肯定是不如单表查询的。而且,随着业务数据的增长,过多的联表查询会增加业务拓展的难度,例如后期的分表分库。此外,联表查询产生的数据可能并非是你精确想要的,极大可能是会查询到部分冗余数据。最后,如果考虑到可能会产生的需求变更,联表查询可能不满足需新的需求,其改动难度是大于单表查询后在业务层处理这部分数据的。

《阿里巴巴JAVA开发手册》中超过三张表禁止join操作也是考虑到这些问题。
至于实际开发中使用哪种,考虑到可能的用户及数据的增长,个人建议单表查询,然后在业务层处理,便于拓展,灵活性也较高。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题