• mysql优化之N+1问题


      在网上找了小马哥视频来学习了一下mysql的优化。准备写些博客来做个总结,加深记忆。


    什么是N+1问题

      A对象关联B对象,A对象进行列表展示时需显示B对象的关联属性,这样需要先用一条sql将N个A对象查询出来,再用N条sql将这些对象的关联属性查询出来。违背了减少数据库交互原则,影响性能。

    解决方法

      方法一:连接查询,在查询A对象的时候,将关联的B对象查询出来。缺点:1、连接的表增加,sql性能下降;2、如果N个A对象关联的是同一个B对象,会使结果集非常庞大,返回结果集需要消耗性能,并且影响排序性能。比如100个employee都关联dept id 1,本来dept的数据只需出现一次,这里为了避免N+1,重复出现100次。

      方法二:A表中设置冗余字段。缺点:更新B表需要更新A表。更新A表时需要增加修改B对象属性的逻辑。

      方法三:性能最佳,1+1查询。先用sql查出所有employee查询出,将他们关联的deptId放到一个set中,再发一条sql,deptid in set 将所有dept查出,之后在程序中将deptset 进入employee。

  • 相关阅读:
    LeetCode "Median of Two Sorted Arrays"
    LeetCode "Distinct Subsequences"
    LeetCode "Permutation Sequence"

    LeetCode "Linked List Cycle II"
    LeetCode "Best Time to Buy and Sell Stock III"
    LeetCode "4Sum"
    LeetCode "3Sum closest"
    LeetCode "3Sum"
    LeetCode "Container With Most Water"
  • 原文地址:https://www.cnblogs.com/hungryforknowedge/p/10023268.html
Copyright © 2020-2023  润新知