gpt4 book ai didi

mysql - InnoDB -> Int 与 VarChar 的键数

转载 作者:行者123 更新时间:2023-11-30 22:05:16 25 4
gpt4 key购买 nike

我正在阅读各种论坛和堆栈流问题,但找不到我的答案。

我试图找出将存储在 16KB InnoDb 数据库页面中的键的数量。

正如您在 this forum 中看到的那样他们提到如何计算单个页面中 MyISAM 的键数。我想为 InnoDb 做同样的事情。我不明白这些计算是如何进行的。

我正在比较一个 4KB 的 int 和一个 VARCHAR (200)。如果我能得到这个计算就太好了。

最佳答案

  • 索引的结构为 BTree。
  • InnoDB BTree 最初只填满了 15/16。
  • 经过大量改动后,BTree 的平均填充率为 69%。
  • 索引条目中的每个“行”都有大量开销。
  • PRIMARY KEY(在 InnoDB 中)与数​​据“成簇”。所以只有非叶节点占用额外的 block 。
  • 二级索引包含PRIMARY KEY的所有列;这就是他们“指向”记录的方式。
  • 基于以上两项,在 BTree 中仅使用 INT 作为索引是没有意义的。

我使用简单的经验法则:每个 BTree 100“行”。
推论:一百万行 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,注意有两个INT。每个 block 可能有 300-400 个“行”。 1000 万行需要 3 个级别。

对于 i_str,我们假设平均有 100 个韩语字符——文本有 300 个字节。每个 block 可能有 25-35 个“行”。 1000 万行需要 5 个级别。

ALTEROPTIMIZE 可以也可以不对索引进行碎片整理。

information_schema 表提供了关于每个 BTree 及其级别的一些详细信息。 Percona 和 MySQL 对此有不同的表。

底线:计算过于模糊,无法准确计算。我希望我的挥手给了你一些更好的处理方式。

关于mysql - InnoDB -> Int 与 VarChar 的键数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41992859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com