我有一个表,其中包含两个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磁盘使用开销所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)