mysql – InnoDB磁盘使用开销

编程之家收集整理的这篇文章主要介绍了mysql – InnoDB磁盘使用开销编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个表,其中包含两个32位整数.这两个整数用于创建聚簇索引.用于创建表的sql如下,

CREATE TABLE `a` (
  `var1` int(10) unsigned NOT NULL,`var2` int(10) unsigned NOT NULL,PRIMARY KEY (`var2`,`var1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

>此表中有6921338行(使用SELECT COUNT(*)FROM a检索)
>该表使用358580224字节的空间(使用SHOW TABLE STATUS检索)

根据我的计算,每行使用51.8个字节.我知道InnoDB有storing rows的开销.但是,使用MysqL网站,我计算出行大小应该是26个字节(5个字节的头,8个字节的整数,6个字节的事务id和7个字节的滚动指针字段) .

我正在尝试减少行大小,因为该表可能会填充多达160亿条记录.

我的计算错过了什么?如何优化表格以减少占用空间?或者我应该切换到不同的数据库引擎?

更新

我为这个表做的查询;

INSERT INTO a(var1,var2) VALUES(INTEGER,INTEGER),(INTEGER,...,INTEGER);
SELECT var1 FROM a WHERE var2=INTEGER;
DELETE FROM a WHERE var2=INTEGER;
最佳答案
这是因为您创建的索引也占用了空间.对于InnoDB中的聚簇索引,行数据实际存储在索引叶节点内,因此当使用索引时,索引不指向行,而是指向包含行数据的索引叶节点与PKEY.

这导致存储量大得多.

Take a look here

总结

以上是编程之家为你收集整理的mysql – InnoDB磁盘使用开销全部内容,希望文章能够帮你解决mysql – InnoDB磁盘使用开销所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢寻找一群志同道合、互帮互助的学习伙伴,可以点击下方链接加入:
编程之家官方1群
编程之家官方2群
编程之家官方3群
编程之家官方4群

相关文章

猜你在找的MySQL相关文章

显示: phpMyAdmin 尝试连接到MySQL服务器,但服务器拒绝连接。您应该检查配置文件中的主机、用户名和密码,并确认这些信息与 MySQL 服务器管理员所给出的信息一致。 原因: 可能是修改了
<( ̄ˇ ̄)/ by my笔触 本文地址:http://www.cnblogs.com/yuxiuyan/p/6511837.html 转载请注明出处及链接! MySQL是我们经常使用的数据库处
问题描述:要将一个mysql中六个数据库导出来,使用mysqldump导出 mysqldump使用语法:mysqldump -uroot -p -S /data/mysql/db_itax_m/mys
问题描述:用户有一个这样一个需求,在一张表里会不时出现 “违规” 字样的字段,需要在出现这个字段的时候,把整行的数据删掉。这是个采集任务,如果发现有“违规”字样的数据,会整点或者什么时间进行统一上报,
问题描述:有需要mysql某几张表的需求,某个数据库某几张表,导出先检查相应的数据库和表是否存在 数据泵用法:默认导出的是表结构以及表中的数据 mysqldump -uroot -p -S /data
问题描述:将一个库中的表迁移到另一个数据库或实例下,利用ibd文件物理迁移,可适用情况为数据库起不来,强制迁移数据文件恢复 将数据库中的zabbix数据迁移到另一个库中 frm:存储表的列信息 ibd
问题描述 有业务反馈当前用户无法创建触发器和存储过程,让用户自己测试,该用户进行对表的增删改查等其他权限没有问题,这边用root用户查证,该用户拥有对当前库的所有权限,但是为什么就是创建不了触发器呢?
问题描述:将Mysql8.0.22和Mysql5.7.32部署在同一环境下 操作系统:centos7.8 数据库:Mysql8.0.22、Mysql5.7.32 版本 占用端口 实例名 数据文件 端口
微信公众号搜索 “ 程序精选 ” ,选择关注!
微信公众号搜 "程序精选"关注