mysql join 与 拆分成单表查询如何选择

news2024/12/23 6:26:05

参考以下文章,不错 

数据库联表查询时,是直接使用join好还是分别查询到数据后自己处理较好? - 知乎

一,声明

1,数据量

首先场景是多个表数据量比较大,可能达到百万级

2,结论:最好不要用join,用也不超过3张表。

推荐:代码 + 单表查询代替多join

即业务层处理,让sql变简单

二,使用单表查询理由

好维护,易优化,效率高,可复用

1.易读,相比多join,单表查询更容易理解,VS 不需要梳理复杂sql关系

2.易改/易维护,如果业务有变更,增减字段,或者查询数据逻辑有变,单个查询更容易维护,VS复杂sql,改动起来更复杂,更容易出错

3.易优化,更方便创建索引,explain分析更简单,更容易找出慢的原因,更容易优化 VS 复杂

4.可复用,单表查询,sql可复用 VS 不可复用

5.效率高,当数据量比大时,join效率下降比较厉害,join结果是表的笛卡尔积,检索是几何倍上升。

6.减少冗余字段查询,单表只查询一次,join会重复访问,m * n

7.分库分表,当需要分库分表是,夸库或分表,单表处理起来更容易,join实现起来比较复杂

8.锁竞争,可以减少锁竞争

三,业务层处理优势

易处理,可缓存

1.逻辑拆分,可以对数据库表进行拆分,高性能/好拓展,单表查询结果,再关联起来,相比复杂join,处理逻辑容易的多。

2.可缓存,有些数据可进行缓存,不用重复查库

3.IN()代替关联查询,查询本身效率也可能会有所提升。查询id集的时候,使用IN()代替关联查询,可以让MySQL按照ID顺序进行查询,这可能比随机的关联要更高效

四,join优势

1.join分页比较容易,单表查询,对于总结果分页,需要手动分页

五,思考

1.业务层数据量问题,当表的量比较大,比如到达十万,百万级,又需要全量查询时,把所有数据都查询出来,会导致什么问题?如下

【内存溢出问题】实际开发中,一次从数据库取出过多数据,导致内存溢出问题_一次性从数据库中读取数据过多_CookieOrYou的博客-CSDN博客

处理方案

分页处理,对基础表查询时进行分页,然后取条件作为后续子查询条件,避免一次读取大量数据

2.大量join查询,执行太久,对数据库的影响,会拖垮数据库吗?

六,参考文档,这边文章不错

数据库联表查询时,是直接使用join好还是分别查询到数据后自己处理较好? - 知乎

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628557.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot项目启动指定对应环境的方法

1. 多环境准备 今天教大家一种多环境profile的写法,当然也可创建多个yml文件。如下所示: spring:application:name: cms-discovery-eureka-ha --- # 区分多环境 spring:profiles: peer1 server:port: 9092 eureka:in…

十、ELK安装ElastAlert 2插件飞书机器人告警(docker)

实现效果 1.创建相应挂载目录和文件 可任意位置,挂载对上就行,方便直接在宿主机修改配置。 /data/feishu-alert/config.yaml /data/feishu-alert/rules 2.编写config.yaml配置文件(/data/feishu-alert/config.yaml) #指定告警文件存放目录 rules_fo…

从C语言到C++_16(list的介绍和常用接口函数)

目录 1. list 介绍和简单使用 1.1 list介绍 1.2 list简单接口函数 1.3 push_back 和遍历 1.4 list常规接口函数使用 2. list 的其它接口函数 2.1 splice 接合 2.2 remove 删完一个值 2.3 sort和reverse 本章完。 list是个双向带头循环链表。 带头双向循环链表我们在…

21份软件测试全流程文档模板(标准版)

1、需求说明书 2、功能测试计划 3、功能测试用例 4、业务流程测试用例 5、系统安装配置说明书 6、阶段功能测试报告 7、性能测试计划 8、性能测试用例 9、性能测试报告 10、系统功能测试报告 11、需求变更说明书 12、用户建议说明书 13、验收测试报告 14、产品发布说明书 15、系…

redis下载安装

本文主要介绍如果在Centos7下安装Redis。 1.安装依赖 redis是由C语言开发&#xff0c;因此安装之前必须要确保服务器已经安装了gcc&#xff0c;可以通过如下命令查看机器是否安装&#xff1a; <span style"color:#000000"><span style"background-c…

Matlab论文插图绘制模板第101期—人口金字塔图

在之前的文章中&#xff0c;分享了Matlab双向柱状图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一种特殊的双向柱状图&#xff1a;人口金字塔图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自…

Lecture 17 Machine Translation

目录 Statistical MTNeural MTAttention MechanismEvaluationConclusion Machine translation (MT) is the task of translating text from one source language to another target language why? Removes language barrierMakes information in any languages accessible t…

Polarion工作流插件(自定义)

创建插件命名插件配置插件Condition&Function package com.polarion.capital.example.conditions;import com.polarion.alm.tracker.model.IWorkItem; import com.polarion.alm.tracker.workflow.IArguments; import com.polarion.alm.tracker.workflow.ICallContext; impo…

TIME_WAIT的处理方式

TIME_WAIT 是什么 TIME_WAIT 是指在 TCP 连接关闭时&#xff0c;等待所有分组确认被接收的状态&#xff0c;这个状态会持续 2MSL&#xff08;Maximum Segment Lifetime&#xff09;的时间&#xff0c;以确保所有分组都被接收。在这段时间内&#xff0c;该连接不能被重用。MSL …

Jmeter 实现 grpc服务 压测

一、Jmeter安装与配置 网上有很多安装与配置文章&#xff0c;在此不做赘述 二、Jmeter gRPC Request 插件安装 插件下载地址&#xff1a;JMeter Plugins :: JMeter-Plugins.org 将下载文件解压后放到Jmeter安装目录下 /lib/ext 然后在终端输入Jmeter即可打开 Jmeter GUI界面…

搞定“超超超难”剑桥面试数学题番外篇:ARM64汇编

0. 概览 在 有趣的小实验&#xff1a;四种语言搞定“超超超难”剑桥面试数学题 那篇博文中&#xff0c;我们使用 4 种语言&#xff08;x64汇编、C、Swift 以及 Ruby&#xff09;实现了一道算法题。 不过&#xff0c;其中的汇编语言对应的是 intel CPU 上的 x64 指令集&#x…

手把手教你如何把系统的前端页面改成vue 脚手架项目,实现前后端分离

这篇文章从零开始&#xff0c;介绍怎么把现有的一个商城的页面移动到vue脚手架项目上&#xff0c;实现前后端代码的完全分离。 首先&#xff0c;我们需要新建一个vue的脚手架的项目&#xff0c;在此之前&#xff0c;需要安装node.js 打开IntelliJ IDEA或者winR&#xff0c;输入…

【Java基础学习打卡03】计算机中数据的表示、存储与处理

目录 前言一、数据的表示1.数据与信息2.计算机中的数据3.计算机中数据的单位 二、数据的存储三、数据的处理1.进位计数值2.进制间转换 四、字符编码总结 前言 本小节主要介绍在计算机中数据的表示、存储与处理。要知道计算机内部使用二进制数据&#xff0c;也就是0和1组成的数…

STM32单片机+机智云AIoT+智能服药箱

摘要:随着我国老龄化进程的日趋加快&#xff0c;越来越多的老年人步入了快乐并充实的晚年生活。但是随着年龄的增长&#xff0c;各种医药用品也成了老年人生活的必需品&#xff0c;有人每天甚至需要在不同时间服用多种不同的药物&#xff0c;如果子女不在身边&#xff0c;老年人…

一款基于RT-Thread操作系统的自动测温+风扇自动调速+加湿+自动启停的智能风扇项目(附源码下载)

基于 RT-Thread 的智能加湿风扇 作品背景 一款基于 RT-Thread 操作系统的自动检测温湿度情况进行风扇转速自动调节&#xff0c;加湿自动启停的桌面风扇。 所用硬件&#xff1a; 主控&#xff1a;CH32V307 开发板。温湿度检测&#xff1a;AHT10 温湿度模块。风扇主体&#x…

企业开源测试项目实战(附全套实战项目教程+视频+源码)

接口测试项目 1. No matching distribution found for itypes1.1.0 Could not find a version that satisfies the requirement itypes1.1.0 (from -r requirements.txt (line 8)) (from versions: ) No matching distribution found for itypes1.1.0 (from -r requirements.…

Deepspeed Chat项目理解

ChatGPT的广泛使用促进大模型火起来了&#xff0c;深度学习人工智能开启了2.0时代&#xff0c;deepspeed chat是微软开源的大模型训练工具&#xff0c;它充分利用了deepspeed的高效训练的特点&#xff0c;能够自动化的进行多种大模型训练。 言归正传&#xff0c;在博客中我将对…

什么是大数据,常见的大数据应用领域?

现在大数据发展的如火如荼&#xff0c;也有不少小伙伴对于什么是大数据比较感兴趣&#xff0c;那么大数据在比较官方的定义是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力…

ASP.NET Core Web API入门:创建新项目

ASP.NET Core Web API入门&#xff1a;创建新项目 一、引言二、创建新项目三、加入Startup类&#xff0c;并替换Program.cs内容四、编辑Program.cs代码五、修改控制器的路由六、运行项目 一、引言 最近闲着&#xff0c;想着没真正从0-1开发过ASP.NET Core Web API的项目&#…

Navicat for Redis 与 Navicat Premium 16.2 现已正式发布 | 释放 Redis 全部潜能

今天&#xff0c;我们正式发布 Navicat for Redis 与 Navicat Premium 16.2 两款产品。注入 Redis 能力&#xff0c;这对 Navicat 具有里程碑意义。 此次首发的 Navicat for Redis 数据库管理开发工具&#xff0c;将为 Redis 用户的日常工作带来更为便捷、高效的全新体验。同时…