【学习日志】MySQL分表与索引的关系
什么情况下需要分表呢?分表又能解决什么问题呢?
一般情况下分表的直接原因是数据量太大了,比如一张表一共只有1w条数据,确实没必要分表。为什么数据量大了就需要分表呢?首先得看看数量量过大后会带来什么问题。
以InnoDB为例:
使用的是B+树,聚簇索引。如果数据量过大,可能会导致多一次甚至多次磁盘IO,查询性能大幅下降。
因此,我们需要尽量将B+树层数保持在3层以内。那么如何计算3层的B+树可以保存多少数据呢?
页是InnoDB存储引擎磁盘管理的最小单位,每个页默认16KB。那么一个叶子节点能存储的数据量为16k,每一页留给用户存储数据的空间为15232byte。
每一条索引记录大小=8byte(bigint主键)+6byte(指针信息)+5byte(行标头)=19byte
那么15232÷19≈800条数据索引,如果主键为int,那可存储的数据索引会更多。
由于InnoDB使用的是B+树
叶子节点数量=800(第一层单个节点索引数量)*800(第二层单个节点索引数量)=640000个
假设表如下:
CREATE TABLE `t1` (
`id` bigint NOT NULL PRIMARY KEY,
`type` char(5) NOT NULL,
`data` char(5) NOT NULL,
(`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
那么每条数据大小为
8+5+5+6(事务ID)+7(指针字段)+5(行记录头信息)=36byte
15232 / 36 = 423条数据
每个叶子节点可以存放423条数据,那么三层B+树可以存放 423*640000 <span class="katex"><span class="katex-mathml">=&nbsp;270,720,000,约2亿7千万条数据。
【学习日志】MySQL分表与索引的关系的更多相关文章
- MySQL分表(Partition)学习研究报告
最近在开发一个新的项目,可能会产生大数据量,需要对部分表进行分表操作,故来研究学习MySQL的分表功能. 由于实验报告已经写成Exlce文件了,各位看过就直接下载吧:MySQL分表分析报告.xls 以 ...
- 浅谈MySQL分表
关于分表:顾名思义就是一张数据量很大的表拆分成几个表分别进行存储. 我们先来大概了解以下一个数据库执行SQL的过程: 接收到SQL --> 放入SQL执行队列 --> 使用分析器分解SQL ...
- Mysql分表和分区的区别、分库分表介绍与区别
分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这 ...
- MYSQL分表与分区
什么是分表分区分表分区的区别实现方式上数据处理上提高性能上实现的难易度上mysql分表和分区的联系如何分区概述分区技术支持分区类型及举例注意应用场景示例订单表比预想中扩张速度快坑爹的日志表每半月一个分 ...
- Mysql分表和分区的区别、分库分表介绍与区别(转)
分表和分区的区别: 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这 ...
- Mysql分表和分区的区别、分库和分表区别
一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看:mysql分表的3种方法. 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个 ...
- mysql分表和表分区详解
为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...
- 【mysql】mysql分表和表分区详解
为什么要分表和分区? 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性能 ...
- mysql分表与分区表
mysql分表与分区表 转自:http://blog.51yip.com/mysql/949.html 一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具 ...
- mysql分表,分区的区别和联系
一,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘 ...
随机推荐
- 畅联云平台(www.24hlink.cn)支持的用传列表
无锡蓝天 沈阳君丰 无锡富贝 海康威视 海湾 苏州思迪 法安通 北大青鸟 金盾 依爱 威隆 1)几乎集齐了市场上常见的用户信息传输装置的类型,如果没接入的,我们也能接入哦. 2)欢迎咨询我们关于用传的 ...
- CSS处理器-Less/Scss
HTML系列: 人人都懂的HTML基础知识-HTML教程 HTML元素大全(1) HTML元素大全(2)-表单 CSS系列: CSS基础知识筑基 常用CSS样式属性 CSS选择器大全48式 CSS布局 ...
- go GMP
动态栈 操作系统的线程一般都有固定的栈内存(通常为2MB),而 Go 语言中的 goroutine 非常轻量级,一个 goroutine 的初始栈空间很小(一般为2KB),所以在 Go 语言中一次创建 ...
- 2022春每日一题:Day 34
题目:lowbit求和 (没有找到哪个公开题库有这个题) 题意:求数组中任意一对数的异或和的lowbit的总和. 对于异或,二进制位中两个数相等则为0,反之为1,而且此题是要求lowbit,那我们利用 ...
- MybatisPlus快速入手-----逆向工程
public class getCode { @Test public void main1() { // 1.创建代码生成器 AutoGenerator mpg = new AutoGenerato ...
- kubernetes数据持久化PV-PVC详解(一)
官方文档地址: https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/ 1. 什么是PV,PVC? 1.1 什么是P ...
- 探讨Morest在RESTful API测试的行业实践
摘要:在本文中,我们将重点探讨使用自动化智能化Morest测试技术在RESTful API测试的行业实践. 本文分享自华为云社区<[智能化测试专题]华为云API智能测试工具--Morest测试框 ...
- Java第一课Hello World
java第一课 Hello World 学习 新建文件夹放写的代码 新建.txt文件,并写入java 输出Hello World 的代码 public class Hello{ public ...
- 协程- gevent模块
协程 1.什么是协助:在单线程下实现并发效果 2.协程的原理: 通过代码监听IO操作一旦遇到 IO 操作就立刻切换下一个程序 让cpu一直在工作 这样就可以一直占用CPU的效率 提高程序执行效率 切换 ...
- 1.5.6 NN与2NN-hadoop-最全最完整的保姆级的java大数据学习资料
目录 1.5.6 NN与2NN 1.5.6.1 HDFS元数据管理机制 1.5.6.2 Fsimage与Edits文件解析 1.5.6.2.1 Fsimage文件内容 1.5.6.2.2 Edits文 ...