zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    ping与telnet的区别
    TCP连接的建立与关闭
    网络的7层协议
    oracle数据库中,分天查询数目
    求某个字符在字符串中的第5个位置
    高精度乘
    高精度加法
    二叉排序树(建树,先序,中序,后序遍历)
    求哈夫曼树的带权路径长度和
    HDU_1237_简单计算器
  • 原文地址:https://www.cnblogs.com/hungryforknowedge/p/10023268.html
Copyright © 2011-2022 走看看