如何从MySQL获取特定表的mysql index值?
“大多数MySQL索引(PRIMARY KEY,UNIQUE,INDEX和FULLTEXT)是 存储在B树中。”
您可以在文档中查看这是B树吗?
答案 0 :(得分:1)
研究B树。更具体地说,是B + Trees。
让我们通过BTree索引搜索单个项目。 BTree具有根节点;从那里开始。它可能具有100个到子节点的链接,以及每个子节点中的值范围信息。您进入适当的子节点。对于一张小桌子,您已经完成。但是对于一张大桌子,您需要重复几次该过程。 (对于具有 trillion 行的表,可能需要进行6次迭代。)完成。您已经找到了想要的一行。
现在,让我们获取一个“范围”的行。 (示例:WHERE id BETWEEN 1234 and 9876
或WHERE name LIKE 'T%'
执行上述操作以查找范围的第一个,然后转到您所在的底部(“叶”)节点中的“下一个”记录。您用完了叶节点中的记录。
+
中的B+Tree
是如何加入的。这意味着从该节点到底层的“下一个”节点之间存在链接。因此,继续进行范围查询非常快捷。
“扇出”数为100的百万行表的统计信息:
要查找特定项目:需要触摸3个节点(在InnoDB中为16KB块)。
要获取500个连续的行:需要3个节点才能开始;然后再向前扫描5个。
比较...如果没有索引,则需要扫描大约10,000个块(1M / 100)的整个表。以上任一假设查询都需要这样做。
在InnoDB(在MySQL中)中,几乎您创建的所有键都是PRIMARY KEY,UNIQUE和INDEX。那是B +树;没有其他选择(与其他供应商不同)。除此之外,FULLTEXT中还有SPATIAL;它们更复杂。
如果您执行SHOW CREATE TABLE foo
,则会获得一些有关索引的信息。 `information_schema有更多信息。