67,781
社区成员
发帖
与我相关
我的任务
分享
比如有a,b两张表,两张表都差不多有十几w行记录,需要查询的字段在两张表中,那么是关联查询效率高点还是分别查a,b两张表,再在service层合并数据效率高点?谢谢!
join联表查询时候小表驱动大表,通过索引字段去进行关联。如果表记录比较少的话,效率还是可以的,有时效率超过单表查询。但是如果数据量上去,多表查询是笛卡尔乘积方式,检索的数据是几何倍上升。另多表查询索引设计上也考验开发者的能力,索引设计如果不合理,大数据量下的多表查询,很可能把数据库拖垮。
同时相比而言,拆分成单表查询+代码上组装,则业务逻辑更加清晰,优化更方便,单个表的索引设计上也更简单。多用几行代码,多几次数据库查询换取这些优点,还是非常不错的。join联表的SQL,基本不太可能被复用,但是拆分后的单表查询,比如上面例子中,我查询出tab数据,任何地方组装需要tab数据,我都不需要再次做相关查询,直接使用。在实际开发场景中,在代码初步开发阶段(如果摊上一个不太靠谱的产品),业务发生变动,某张表的结构发生变动,很可能整个join查询都变得不可用,复杂的关联查询,在修改时,基本等于推倒重来。很多复杂的逻辑在Service处理,不在数据库处理会更好。
单表查询+代码上组装相当于解耦,现在开发中,我们常常使用各种ORM框架