MySQL 分表真的能提高查询效率?

news2025/2/4 6:56:09

背景

首先我们以InnoDB引擎,B+Tree 3层为例。我们需要先了解几个知识点:页的概念、InnoDB数据的读取方式、什么是树搜索?、一次查询花费的I/O次数,跨页查询。

页的概念

索引树的页(page)是指存储索引数据的最小单位。MySQL将索引数据分成固定大小的页来存储,一般情况下,默认的页大小是16KB。

InnoDB数据的读取方式

InnoDB 的数据是按数据页为单位来读写的。也就是说,当需要读一条或者多条记录的时候,并不是将这个记录本身从磁盘读出来,而是以页为单位,将其整体读入内存。

什么是树搜索?

从根节点到叶子节点的搜索过程,被称为"树搜索"。

一次树搜索需要花费的IO次数

从页1->页2>页3,每页进行了一次I/O操作,所以一共进行了3次I/O。如果需要回表,那就是6次I/O。

第一次I/O 

第二次I/O

第三次I/O

跨页查询

参考上图,跨页查询指在进行数据查询时,需要跨越多个数据页才能获取完整的查询结果。当MySQL中的表数据量很大时,数据可能会被存储在多个数据页中。每个数据页通常包含一定数量的数据行。当执行一个查询时,如果查询的结果需要跨越多个数据页才能完全获取,就称为跨页查询。

分表可以提高查询效率?

可以,接下来从垂直分表和水平分表两种方式展开说明:

垂直拆分

  • 当进行垂直拆分后,每个小表只包含部分列数据,数据量减少,可以更容易地存放在一张或少数几张数据页中。这样,在进行跨页查询时,由于需要跨页查询的数据量减少,查询操作可能只需要访问更少的数据页,减少了磁盘I/O的次数,提升了查询性能。
例子:
  • 假设我们有一张名为"users"的表,其中包含12万条数据,每张数据页储4万条数据。现在要查询这12万条数据。
  • 拆分前,12万数据分布在3张数据页中,查询需要5次 I/O 才能获取全部的12万条数据。
  • 拆分后,将每张数据页的容量增加到6万条数据,那么查询结果仍然是12万条数据,此时仅需4次 I/O 操作就可以获取结果。这样就减少了1次 I/O 操作,大大提升了查询效率。

水平拆分

  • 在水平拆分后进行并行查询的情况下,每个节点可能需要进行独立的磁盘 I/O 操作,但整体查询速度仍然会比单表的 I/O 操作次数更快。虽然每个节点需要进行独立的 I/O 操作,但并行查询允许多个节点同时进行这些操作,而不是一个节点一个节点地进行。这样可以提高查询的并发性和整体查询速度。
例子:
  • 假设我们有一张名为"users"的表,其中包含12万条数据,每张数据页储4万条数据。现在要查询这12万条数据。
  • 拆分前,12万数据分布在3张数据页中,查询需要5次 I/O 才能获取全部的12万条数据。
  • 拆分后,我们将数据分散到了3张表中,每张表存储4万条数据。当我们需要查询这12万条数据时,每次查询都需要同时对3张表进行操作。尽管每张表都需要进行3次I/O(输入/输出),但由于并行查询的优势,我们仍然只需要进行3次I/O。这样,我们可以通过并行处理在多个节点上同时执行查询操作,从而提高查询的效率。

树图

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

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

相关文章

Flutter本地化(国际化)之App名称

文章目录 Android国际化IOS国际化 Flutter开发的App,如果名称想要跟随着系统的语言自动改变,则必须同时配置Android和IOS原生。 Android国际化 打开android\app\src\main\res\values 创建strings.xml 在values上右键,选择New>Values Res…

【lesson21】MySQL复合查询(2)子查询

文章目录 子查询测试要用到的表测试要用到的数据单行子查询案例 多行子查询案例 多列子查询案例 在from子句中使用子查询案例 合并查询union案例union all案例 子查询 子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询 测试要用到的表 测试要用到的数据 单…

TOPCON拓普康BM-7A亮度色度计

用途: 其应用范围非常之广:各种电视/手机/电脑/复印机等的液晶显示屏LCD的亮度、色度、色温、对比度等项目测定;液晶领域内各部件(LED、CCFL、EL背光源,液晶模组,滤光片)的亮度、色度、配光特性…

Qt通用属性工具:随心定义,随时可见(二)

一、话接上篇 本片咱们话接上篇《Qt通用属性工具:随心定义,随时可见(一)》,讲讲自定义的对象属性如何绑定通用属性编辑工具。 二、破杯二两酒 1、一颗小花生 同样,我们先准备一个比较简单的demo&#x…

案例系列:营销模型_客户细分_无监督聚类

案例系列:营销模型_客户细分_无监督聚类 import numpy as np # 线性代数库 import pandas as pd # 数据处理库,CSV文件的输入输出(例如pd.read_csv)/kaggle/input/customer-personality-analysis/marketing_campaign.csv在这个项…

老师的责任和义务

作为一名老师,我们的责任和义务是重大的。在教育领域,我们扮演着至关重要的角色,肩负着培养下一代人才的重任。下面,我将以知乎的口吻,从几个方面谈谈老师的责任和义务。 确保学生获得高质量的教育。这包括制定合理的教…

企业级低代码平台:助力IT部门,释放业务创新力

随着低代码技术的升级,越来越多的企业开始采用低代码平台,如恒逸集团利用低代码平台快速搭建了综合业务管理平台,时间比传统开发缩短近一倍。云表低代码提供的数据、流程、权限、图表等引擎工具,完美适配企业数字化需求。根据Gart…

HarmonyOS应用事件打点开发指导

简介 传统的日志系统里汇聚了整个设备上所有程序运行的过程流水日志,难以识别其中的关键信息。因此,应用开发者需要一种数据打点机制,用来评估如访问数、日活、用户操作习惯以及影响用户使用的关键因素等关键信息。 HiAppEvent 是在系统层面…

《每天一分钟学习C语言·六》

1、 1字节(Byte)8位,1KB1024字节,1M1024KB,1G1024MB 2、 char ch A; printf(“ch %d\n”, ch);ch为65 这里是ASCII码转换 3、 scanf("%d", &i); //一般scanf直接加输入控制符 scanf("m%d&qu…

飞天使-k8s知识点4-验证安装好后功能

文章目录 接k8s知识点2之验证集群功能创建dashboard验证安装nginx 并访问tomcat 访问 接k8s知识点2之验证集群功能 [rootkubeadm-master2 tmp]# kubectl run net-test1 --imagealpine sleep 36000 pod/net-test1 created [rootkubeadm-master2 tmp]# kubectl get pod NAME …

SQLiteStudio安装指南

本博文源于笔者想要打开sqlite3的db文件,于是下载了SQLiteStudio,下载了它,sqlite3的文件随便查看,这里从零开始安装 文章目录 1、搜索官网网址2、开始下载3、开始安装4、开始使用5、总结 1、搜索官网网址 官网地址:…

说说 style gan 中的感知路径长度(Perceptual Path Length)

我在之前的博库中介绍了 style gan 的基本原理,原文中有提出感知路径长度(Perceptual Path Length)的概念。这是一种评价生成器质量的方式。 PPL基本思想:给出两个随机噪声 z 1 , z 2 ​ ,为求得两点的感知路径长度PPL…

【数据结构和算法】最大连续1的个数 III

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一:滑动窗口 2.2 滑动窗口解题模板 三、代码 3.1 方法一:滑动窗口 四、…

一些问题/技巧的集合(仅个人使用)

目录 第一章、1.1)前端找不到图片1.2)1.3)1.4) 第二章、2.1)2.2)2.3) 第三章、3.1)3.2)3.3) 第四章、4.1)4.2)4.3) 友情提…

依托亚马逊云科技构建韧性应用

背景 现代业务系统受到越来越多的韧性相关的挑战,特别是客户要求他们的业务系统 724 不间断的运行。因此,韧性对于云的基础设施和应用系统有着至关重要的作用。 亚马逊云科技把韧性视为一项最基本的工作,为了让我们的业务系统能持续优雅地提供…

企业风控报告中工商和司法数据

在中小企业的大数据风控体系中,工商数据与司法数据是最基础且常见的两类信息维度,它们在企业大数据体系中发挥着举足轻重的作用。这些数据大部分都是社会公开信息,因此在行业市场中易于获取。企业可以通过国家或地方的相关工商司法公共服务系…

幻彩LED灯带芯片:SM16703SP单点单控 断点续传

幻彩LED灯带芯片SM16703SP3是一款单点单控断点续传的芯片,它采用了先进的技术,可以实现灯光的变化和控制。这款芯片不仅仅可以提供各种丰富多彩的灯光效果,还有断点续传功能, LED断点续传灯条采用了双信号线交叉传输的方案&#x…

SpringBoot中maven的parent标签的来源与详解

1、基本使用 场景一:有两个项目A、B、C,都依赖同一个jar包:lombok.jar。 若分别在各自的项目中引入lombok.jar的依赖,那么当lombok.jar的版本发生变化时,三个项目pom文件的都需要改。 此时就可以使用parent标签。首先…

docker搭建mysql8.0.32,实现主从复制(一主两从)

安装docker的步骤、使用命令就不写了,本文章是基于会使用docker、linux基本命令的基础上来写的。 开始步骤: 1. 拉取 mysql 镜像 docker pull mysql:8.0.32 2. 启动容器并运行mysql a. 准备mysql的配置文件(该配置文件是:mysq…

Certum多域名dv证书保护几个域名

多域名SSL证书是一种用于保护多个域名的SSL证书,适用范围非常广泛,比如,个人或者企事业单位可能管理多个子域名或主域名,这些域名都受同一个多域名SSL证书的保护,而不是为每个域名单独申请SSL证书。今天就随SSL盾小编了…