首页 > 数据库 >【学习日志】MySQL分表与索引的关系

【学习日志】MySQL分表与索引的关系

时间:2023-01-16 09:00:12浏览次数:46  
标签:索引 InnoDB 数据量 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千万条数据。

标签:索引,InnoDB,数据量,MySQL,分表,日志,数据,节点
From: https://www.cnblogs.com/maerpao/p/17053092.html

相关文章

  • 基于AD Event日志监测AdminSDHolder
    01、简介AdminSDHolder是一个特殊的AD容器,通常作为某些特权组成员的对象的安全模板。ActiveDirectory将采用AdminSDHolder对象的ACL并定期将其应用于所有受保护的AD账户......
  • MySQL判断数据是不是存在的方法
        在mysql中,可以利用count()函数判断数据是否存在,该函数的作用就是用来统计表中记录数据,语法为“selectCOUNT(字段值)as字段名from表名where字段条件;”,......
  • 使用Logstash工具导入sqlserver数据到elasticSearch及elk分布式日志中心
    首先记下这个笔记,Logstash工具导入sqlserver数据到elasticSearch。因为logstash使用java写的,我本地开发是win11,所以javadejdk必须要安装。具体安装不介绍了,就是网上下个j......
  • 2023.1.15训练日志
    P3957跳房子简单单调队列优化DP,赋inf时出现重大失误没有发现,浪费了比较多时间P2168荷马史诗(最优解)哈夫曼树板子题,一开始就想到补0,结果因为忘记了qsort怎么用......
  • mysql--时间
    mysql时间相关类型:date//年月日2023-1-15time//时分秒10:10:10datetime//年月日时分秒2023-1-1510:10:10timestamp//时间戳,插入,更新时自动写入当前时间注......
  • 解决mysql输入密码无法登录的问题
    ERROR1045(28000):Accessdeniedforuser'root'@'localhost'(usingpassword:YES)当我输入root登录输入密码就会出现这种错误,不输入密码就可以登录,不输入密码里面......
  • 开启wamp依旧使用已下载的mysql
    1.打开D:\Environment\wamp64\bin\mysql\mysql8.0.31,修改my.ini添加本机mysql密码,并且将3个port=3306改为port=33162.打开D:\Environment\wamp64\apps\phpmyadmin5.2.0,......
  • 数据处理日志
    数据处理日志 packagecom.vfsd.core;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;importjava.io.IOException;importjava......
  • Windows 安装 MySQL
    转:Win10安装MySQL教程下载安装包https://dev.mysql.com/downloads/installer/安装选Custom模式:从可安装的产品(Products)中选择MySQLServer:点击绿色按钮,将......
  • 温习日志-3
    温习日志——2023年1月15日上午学习内容语句与表达式语句只执行代码,而不返回值如果在语句中声明变量,会产生块级作用域,外部访问不到块级作用域中的局部变量表达式是......