Mysql如何解决数据库N+1查询问题
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍Mysql如何解决数据库N+1查询问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!简介在orm框架中,比如hibernate和mybatis都可以设置关联对象
千家信息网最后更新 2025年02月02日Mysql如何解决数据库N+1查询问题
这篇文章主要介绍Mysql如何解决数据库N+1查询问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
简介
在orm框架中,比如hibernate和mybatis都可以设置关联对象,比如user对象关联dept
假如查询出n个user,那么需要做n次查询dept,查询user是一次select,查询user关联的
dept,是n次,所以是n+1问题,其实叫1+n更为合理一些。
mybatis配置
UserMapper.xml
数据表如下:
department表
|id|name|
user表
|id|name|department_id|
需求是得到以下结构的数据:
[ { "id":1, "name":"test", "department_id":1, "department":{ "id":1, "name":"测试部门" } }]
方法一:循环查询
查询用户列表
循环用户列表查询对应的部门信息
$users = $db->query('SELECT * FROM `user`');foreach($users as &$user) { $users['department'] = $db->query('SELECT * FROM `department` WHERE `id` = '.$user['department_id']);}
该方法查询次数为:1+N(1次查询列表,N次查询部门),性能最低,不可取。
方法二:连表
通过连表查询用户和部门数据
处理返回数据
$users = $db->query('SELECT * FROM `user` INNER JOIN `department` ON `department`.`id` = `user`.`department_id`');// 手动处理返回结果为需求结构
该方法其实也有局限性,如果 user 和 department 不在同一个服务器是不可以连表的。
方法三:1+1查询
该方法先查询1次用户列表
取出列表中的部门ID组成数组
查询步骤2中的部门
合并最终数据
代码大致如下:
$users = $db->query('SELECT * FROM `user`');$departmentIds =[ ];foreach($users as $user) { if(!in_array($user['department_id'], $departmentIds)) { $departmentIds[] = $user['department_id']; }}$departments = $db->query('SELECT * FROM `department` WHERE id in ('.join(',',$department_id).')');$map = []; // [部门ID => 部门item]foreach($departments as $department) { $map[$department['id']] = $department;}foreach($users as $user) { $user['department'] = $map[$user['department_id']] ?? null; }
以上是"Mysql如何解决数据库N+1查询问题"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
查询
部门
数据
方法
用户
问题
关联
数据库
内容
对象
篇文章
结构
需求
处理
循环
最低
代码
价值
信息
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库原理1
什么数据库可以管理视频
极路由 vpn服务器
华东师大密码与网络安全
黑客转网络安全
在数据库中日期属于什么类型
数据分级分类怎么对接数据库审计
mcgs数据库怎么和plc变量对应
空间数据库技术的概念
网络技术发展的规律
正确道德取向成为网络安全主流
轻量级服务器安全组在哪
vb删除不了数据库中的数据
启动服务器英语
计算机网络安全的出众视频
杨浦区游戏软件开发流程
游戏服务器内存占用过高
theisle单挑服务器
dl388服务器售后
监控服务器架设
服务器崩溃丢失信息事件
小学生网络安全教育微视频
联想服务器制作raid0
查询access数据库
在数据库中日期属于什么类型
网络安全隶书作品
服务器数据库如何打开
数据库个人博客网站模板下载
魂斗罗安全服务器
上海盒我印网络技术有限公司招聘