我正在做一些研究,但我正在努力寻找MYISAM 的b 树的分支因子,例如每页(节点)有多少键。
我还想知道 char/varchar 键是如何存储的——它们是以全长存储还是仅存储第一个“有意义的”字符。
我所说的“有意义的”字符是指:
create table a( name varchar(1000) primary key ); insert into a('london');
“伦敦”键长 1000 个字符(假设为 ASCII),但键本身只有 6 个字符(如果我们将其表示为 C 字符串,则为 7 个空字符)。
每个索引条目大约有 8 个字节的开销。因此,如果密钥通常为 6 个字节,
key_buffer
块大小为 1KB,并且 BTree 已满 69%:说会有大约 50 行。
因此,3 级 BTree 最多可以处理 50^3 = 125K 行。
.69 来自假设大量随机插入——导致每个块在块拆分之前的 100% 满和之后的 50% 之间振荡。
获取索引的确切值
SELECT
可能会有些晦涩难懂。information_schema
(我知道 InnoDB 有一个。)