我正在通过各种论坛阅读和堆叠流程问题,但找不到我的答案。
我正在尝试找出将存储在16KB InnoDb数据库页面中的密钥数量。
正如您在this forum中所看到的,他们提到了如何在单个页面中计算MyISAM的密钥数量。我想对InnoDb做同样的事情。我不明白这些计算是如何进行的。
我比较一个4KB的int和一个VARCHAR(200)。如果我能得到这个计算会很棒。
答案 0 :(得分:0)
PRIMARY KEY
(在InnoDB中)是"群集"与数据。因此,只有非叶节点才会占用额外的块。PRIMARY KEY
的所有列;这就是他们如何指出'记录。INT
没有意义。我使用简单的经验法则:100'行'每个BTree。
推论:百万行BTree深度约为3级;十亿行的表约为5级。
让我们来看看:
CREATE TABLE x (
id INT ...,
num INT ...,
str VARCHAR(200) CHARACTER SET utf8,
PRIMARY KEY (id),
INDEX i_num (num),
INDEX i_str (str)
) ENGINE=InnoDB;
对于i_num
,请注意有两个INTs
。您可能会获得300-400行#39;每块。 1000万行需要3个级别。
对于i_str
,让我们假定平均有100个韩文字符 - 这是文本的300字节。你可能会得到25-35行'每块。 10M行将需要5个级别。
ALTER
和OPTIMIZE
可能或者可能不会对索引进行碎片整理。
有information_schema
个表格提供有关每个BTree及其级别的部分详细信息。 Percona和MySQL有不同的表格。
底线:计算过于模糊而不准确。我希望我挥手让你有更好的手柄。