根据MySQL手册:SHOW TABLE STATUS
对于InnoDB, Data_length 是近似内存量 为聚簇索引分配,以字节为单位。具体来说就是 聚集索引大小(以页为单位)乘以InnoDB页面大小。
我对"内存量" 感到困惑,因为聚集索引存储在磁盘上,而不是存储在内存中。
我认为正确的表达应该如下:
对于InnoDB, Data_length 是大小的磁盘空间 为聚集索引分配,以字节为单位。
谁能帮助我解释" 记忆量"?
答案 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中。
相关的混淆...... Rows
和Avg_row_length
是近似值。估计一个,然后另一个是从Data_length
除以它计算的。