关于' Data_length'这句话有些不对劲吗? InnoDB表?

时间:2016-09-19 00:37:19

标签: mysql innodb

根据MySQL手册:SHOW TABLE STATUS

  

对于InnoDB, Data_length 是近似内存量   为聚簇索引分配,以字节为单位。具体来说就是   聚集索引大小(以页为单位)乘以InnoDB页面大小。

我对"内存量" 感到困惑,因为聚集索引存储在磁盘上,而不是存储在内存中。

我认为正确的表达应该如下:

  

对于InnoDB, Data_length 大小的磁盘空间   为聚集索引分配,以字节为单位。

谁能帮助我解释" 记忆量"?

1 个答案:

答案 0 :(得分:1)

糟糕!这是一个神秘的句子。提交"文档" http://bugs.mysql.com的错误。 "内存量"是一个糟糕的选择。

这里有更多信息;希望我能更好地解释它。

InnoDB表主要由"数据"组成。和"索引" (以及一些元信息和自由空间)。数据信息 PRIMARY KEY都在BTree中,并且在Data_length中确切地给出了该树的当前大小。它是块大小的精确倍数,默认为16KB。因此,您可以制作的最小的InnoDB表仍然会说Data_length=16384

PRIMARY KEY是(总是在InnoDB中)"群集"与数据。数据由PK订购。

其他索引称为"二级索引;它们生活在单独的BTree中,其总长度为Index_length

大小为innodb_buffer_pool_size的"缓冲池"是RAM的一部分,其中数据和索引被缓存以供InnoDB引擎有效使用。在打开表之前,它的所有块都不在RAM中。引擎从不故意将整个表(或整个二级索引等)加载到RAM中。

相关的混淆...... RowsAvg_row_length是近似值。估计一个,然后另一个是从Data_length除以它计算的。

相关问题