SQL N+1问题

2023-10-27

什么是N+1问题?
在两个表存在一对一,一对多,多对一,多对多等关联信息时,查询一条数据会衍生N条查询的情况就是N+1问题。
比如两个实体类A、B。A与B数一对多,B与A是多对一。
在查询A时,会执行的语句如下:
1.从A表查找符合要求的属性,此时符合条件的数据有N条,SQL语句执行了1次。
2.对于每一条符合的数据,通过它的id去B表查关联信息,此时SQL语句执行了N次。
总计查出A和A关联的B数据共执行SQL语句N+1条

如何减少N+1

  1. 通过连接(内,左、右连接)解决
  2. JPA的配置
    spring.jpa.properties.hibernate.default_batch_fetch_size=??为批量执行大小
    原理是将之前每个sql的执行改为通过关键词in来执行。?为in里面的个数
  3. @BatchSize(size=?)注解
    跟JPA配置的原理一致,但@BatchSize的使用具有局限性,不能作用于 @ManyToOne@OneToOne的关联关系上,只能使用在@ManyToMany@OneToMany
  4. 使用@Fetch()注解
    @Fetch(FetchMode.JOIN): 始终立刻加载,使用外连(outer join)查询的同时加载关联对象,忽略FetchType.LAZY设定。
    @Fetch(FetchMode.SELECT) :默认懒加载(除非设定关联属性lazy=false),当访问每一个关联对象时加载该对象,会累计产生N+1条sql语句
    @Fetch(FetchMode.SUBSELECT) 默认懒加载(除非设定关联属性lazy=false),在访问第一个关联对象时加载所有的关联对象。会累计产生两条sql语句。且FetchType设定有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL N+1问题 的相关文章

  • 错误调试-debugger

    在浏览器中调试 在编写更复杂的代码前 让我们先来聊聊调试吧 调试 是指在一个脚本中找出并修复错误的过程 所有的现代浏览器和大多数其他环境都支持调试工具 开发者工具中的一个令调试更加容易的特殊用户界面 它也可以让我们一步步地跟踪代码以查看当前
  • 【数据结构】二叉树

    一 树的基本概念 1 1 树的概念 树是一种非线性的数据结构 它是由n n gt 0 个有限结点组成一个具有层次关系的集合 把它叫做树是因为它看起来像一棵倒挂的树 也就是说它是根朝上 而叶朝下的 有一个特殊的结点 称为根结点 根节点没有前驱
  • vue prop属性使用方法

    Prop作用是在子组件中接收父组件的值 参考
  • 晚上下班之后可以做什么副业,业余时间需要利用起来

    对大多数普通人来说 他们晚上有很多空闲时间 但他们总是在手机上玩游戏 刷视频 白白度过一夜 事实上 近年来 很多朋友都想利用晚上的时间做一些副业 因为目前的工资已经不能满足自己的需求 再加上生活各方面的压力 他们像山一样压着自己 然而 晚上
  • 【机器学习】Numpy手写机器学习算法,3万行代码!

    目录 Numpy手写机器学习算法 一 前言 二 作者简介 三 项目总体介绍 四 手写 NumPy 全家福 五 项目示例 一 前言 NumPy 作为 Python 生态中最受欢迎的科学计算包 很多读者已经非常熟悉它了 它为 Python 提供
  • vue中props数据变化的问题

    发现问题 在vue项目中 父子组件数据传递是最常见的场景 但是今天在开发过程中父级数据传递到子组件 控制子组件的显隐 发现存在问题 一直监听不到数据的变化 详细排查后发现是因为props在传递数据的时候子组件接收到数据后没有及时发生变化导致
  • FatFs文件系统模块的STM32移植操作(基于STM32的SD卡官方例程说明)

    由于想要读取 MP3 文件 故学习一下 FatFs 文件系统 文章介绍了 FatFs 的移植 对移植代码进行了分析 SD卡接口函数还需参照 STM32关于SDIO的控制 控制SD卡 喜暖知寒的博客 CSDN博客 STM32对SD卡的读 写
  • J2ME平台A-RPG游戏怪物寻路算法初探

    最近似乎在手机上A RPG游戏很受欢迎 当然 我最近也在帮公司写一款A RPG类的游戏 以前从没写过这样的游戏 从有到无的写出来了 也碰到不少问题 包括屏幕滚动时地图title数组索引的校验 整个游戏框架的搭建 地图数据的处理 分层的处理
  • webpack5 笔记三,管理输出

    效果 我们在页面上添加一个按钮 点击时会打印 good morning export function sayHi console log good morning how are you const btn document create
  • [云原生专题-64]:核心概念 - 云原生技术助力5G RAN步入”云”霄 - 对云原生的理解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122751639 目录 一 在后5G时
  • 查看IIS日志以及网站对应的IIS日志文件夹

    1 为什么要查看IIS日志 有时 我们在部署了一个程序之后 虽然程序里面记载了log日志 但有些类似503这样的错误在程序里面是无法记载的 所以我们需要通过查看IIS日志来查找问题 2 IIS日志目录 点进去之后 我们发现 IIS日志文件夹
  • JETBRAIN系列IDE改变终端的字体

    简介 JetBrains是一家捷克的软件开发公司 该公司位于捷克的布拉格 并在俄国的圣彼得堡及美国麻州波士顿都设有办公室 该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开发环境 PhpStorm IntelliJ IDEA
  • frame 和iframe 的区别以及和frameset 的关系及应用

    1 frame不能脱离frameSet单独使用 iframe可以 2 frame不能放在body中 如下可以正常显示
  • C#让panel显示滚动条

    AutoScroll True AutoScrollMiniSize 450 450 设置逻辑区域尺寸 如果它大于控件尺寸就会出现滚动条
  • ffmpeg命令行示例

    在视频上覆盖一张照片 ffmpeg i video mkv i image png filter complex 0 v 1 v overlay out map out out mkv 生成5s的lavfi红色的视频 ffmpeg filt
  • mac brew安装 node 踩坑日记- n切换node不生效

    最近用了一个旧电脑开发 发现里面node管理混乱 有nvm n和homebrew 导致切换node 切换不了 开发也有莫名其妙的错误 所以我打算重新装一下node 使用n做为管理工具 1 删除nvm cd rm rf nvm 2 删除n s
  • 日语 五十音图快速记忆法

    平假名 清音 清音 段 段 段 段 段 行 a i u e o 行 ka ki ku ke ko 行 sa shi su se so 行 ta chi tsu te to 行 na ni nu ne no 行 ha hi fu he ho
  • 持久内存服务器大多数数据库管理系统,内存数据库VS传统数据库:如何在多个任务之间共享内存中的数据?...

    内存数据库 IMDB 将计算机数据存储在计算机的主存储器中 而不是磁盘驱动器中 以产生更快的响应时间 访问存储在内存中的数据可节省从磁盘查询数据所需的时间 依赖快速响应时间和实时数据管理的应用程序使用内存数据库 受益于内存数据库的行业包括电
  • PHY芯片的使用(三)在U-boot下网络PHY的移植

    1 概述 以太网 PHY 驱动移植 主要包括 Linux u boot 及设备树等三个方面标准框架下的移植 本文以裕太8511PHY为例展开说明 一般国产芯片厂商会提供在uboot linux下PHY的驱动 在uboot linux的PHY
  • 【MySQL入门指南】数据库基础DDL操作

    文章目录 MySQL库操作 一 SQL语句 二 创建数据库 1 语法 2 案例 3 极其不推荐的方式 三 查看数据库 1 语法 四 修改数据库 五 删除数据库 六 字符集与校验规则 1 是什么 2 相关指令 3 校验规则的影响 七 备份数据

随机推荐

  • 国外程序员推荐的好书

    1 代码大全 史蒂夫 迈克康奈尔 2 程序员修炼之道 3 计算机程序的构造和解释 4 C程序设计语言 5 算法导论 6 重构 改善既有代码的设计 7 设计模式 8 人月神话 9 计算机程序设计艺术 10 编译原理 龙书 11 深入浅出设计模
  • 使用GPU进行神经网络计算详解

    Pytorch学习笔记 六 使用GPU的简单LeNet网络模型中也提到了如何实现GPU上的运算 虽然不详细 但是也足够 总结 如果对于总结知识已经比较熟悉 那么下面的详解可以不用看 默认CPU进行计算 CPU上变量或模型不能与GPU上变量或
  • json转换javaBean属性值全null

    今天遇到了这么一个问题 解决办法分几步 所有转换javaBean的实体类实现序列化接口 将vo中不用于转换的属性剪掉 设置redis序列化方式为如下 Bean public RedisTemplate
  • JAVA多线程

    多线程 1 基本概念 1 1 程序 进程 线程 程序 完成一定功能的静态代码 对比火车站售票厅 进程 正在执行的静态代码 称为进程 对比北京西站售票 线程 为了并发执行一些异步任务 比对售票的中多个窗口 单核cpu和多核cpu java程启
  • 【机器学习】PCA、LDA、SVD

    线性变换 如果我们将向量 v 左乘矩阵 A 我们就会得到新的向量 b 也即可以表述说矩阵 A 对输入向量 v 执行了一次线性变换 且线性变换结果为 b 因此矩阵运算 Av b 就代表向量 v 通过一个变换 矩阵 A 得到向量 b 下面的实例
  • 智慧用电安全云监控系统

    近年来 我国电气火灾频发 2017年至2019年 我国共之间发生发展电气控制火灾31 1万起 占全国进行火灾总量及伤亡风险损失的30 以上 2019年全年共接报火灾23 3万起 电气火灾11 1万 占52 深圳市荣健市场 12 11 重大火
  • [项目管理-10]:软硬件项目管理 - 项目质量管理(质量)

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 第10章 项目质量管理 10 1 基本概念 10 1 1 概述 10 1 2 项目的质量要求 10 1 3 项目质量的主要内容 10
  • ch1 密码学C/C++库介绍、C中大数的表示、接口语义

    Ch1 密码学C C 库介绍 话休絮烦 既然开了新坑 密码学C C 语言实现 就直接开始吧 这本书的作者是迈克尔 威尔森巴赫 Michael Welschenbach 是书籍的第二版 本书中描述的软件包名称为FLINT C 意思是 数论和密
  • JAVA直接量

    int a 2 char b f 类似以上的2 f 等为直接量 直接量可以是8种基本数据类型 也可以是null 但null只能复制给引用变量
  • 机器学习线性回归算法实验报告_机器学习——线性回归及kNN算法(作业)

    机器学习简介 人工智能AI 机器学习与深度学习 来自贪心学院课堂PPT 它们都是一种科学研究方法 宗旨即辅助人进行决策 减少人的不必要劳动时间 机器学习 训练模型 决策 判别 训练模型 前提选择已知的模型 如 LR kNN DT SVM M
  • 机器学习——交叉验证(留一法、自助法)

    文章目录 交叉验证的作用 留一法 自助法 交叉验证的作用 很多时候我们都在纠结 交叉验证法到底有啥用 我不用这个咋的 交叉验证是一种模型验证技术 可用于评估统计分析 模型 结果在其它独立数据集上的泛化能力 它主要用于预测 我们可以用它来评估
  • Scala入门到精通——第三节 Array、List

    本节主要内容 数组操作实战 列表List操作实战 数组操作实战 1 定长数组 定义一个长度为10的数值数组 scala gt val numberArray new Array Int 10 numberArray Array Int Ar
  • 80C51单片机期末复习

    80C51有基本型和增强型 区别 增强型多了定时器 内置存储空间不同 1冯 诺依曼思想计算机由运算器 控制器 存储器 输入设备 输出设备组成这一计算机的经典结构 2将CPU 存储器 I O接口集成在一片集成电路芯片上 形成单片机微型计算机
  • 录音新手必备,2款音频录制软件推荐!

    有好用的音频录制软件推荐吗 最近需要录制歌曲去参加一个线上的歌手大赛 只需要上传自己录制的音乐就可以了 但是录音软件的质量太差了 就想问问有没有好用的音频录制软件 谢谢 随着数字化时代的到来 录音软件已经不再是专业录音室的专属 越来越多的人
  • 2022.09.01 最新配置maven阿里云仓库配置

    阿里云最新的中央仓库地址及具体配置 之前的配置不能用了 在这里做下笔记留备份 在maven的settings xml文件中配置 idea默认c users 你的用户 m2 settings xml 1 3 完成的setings xml配置如
  • valgrind简介以及在ARM上交叉编译运行【转】

    转自 https blog csdn net dengcanjun6 article details 54958359 版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net dengcanjun6 ar
  • GCC详解-gcc之-Wl选项

    1 介绍 Wl后面的东西是作为参数传递给链接器ld的 比如 gcc Wl aaa bbb ccc 最后会被解释为 ld aaa bbb ccc 2 Wl Map xxx txt 生成map文件 如下会生成map文件mymap txt gcc
  • 算法笔记——差分数组

    差分数组 概念 所谓差分数组就是对数组的相邻元素求差保存到一个新的数组中 这个数组就是差分数组 如下所示 序号 0 1 2 3 4 原数组a 1 5 3 4 3 差分数组d 1 4 2 1 1 作用 用于频繁的区间修改 区间修改是对数组的一
  • 618技术揭秘 - 大促弹窗搭投实践

    背景 618 大促来了 对于业务团队来说 最重要的事情莫过于各种大促营销 如会场 直播带货 频道内营销等等 而弹窗作为一个极其重要的强触达营销工具 通常用来渲染大促氛围 引流主会场 以及通过频道活动来提升频道复访等 因此 如果能将运营的策略
  • SQL N+1问题

    什么是N 1问题 在两个表存在一对一 一对多 多对一 多对多等关联信息时 查询一条数据会衍生N条查询的情况就是N 1问题 比如两个实体类A B A与B数一对多 B与A是多对一 在查询A时 会执行的语句如下 1 从A表查找符合要求的属性 此时