如何从mysql获取特定表的索引值?

时间:2018-11-20 19:41:20

标签: mysql indexing pagination cursor

如何从MySQL获取特定表的mysql index值?

  

“大多数MySQL索引(PRIMARY KEY,UNIQUE,INDEX和FULLTEXT)是   存储在B树中。”

您可以在文档中查看这是B树吗?

1 个答案:

答案 0 :(得分:1)

研究B树。更具体地说,是B + Trees。

让我们通过BTree索引搜索单个项目。 BTree具有根节点;从那里开始。它可能具有100个到子节点的链接,以及每个子节点中的值范围信息。您进入适当的子节点。对于一张小桌子,您已经完成。但是对于一张大桌子,您需要重复几次该过程。 (对于具有 trillion 行的表,可能需要进行6次迭代。)完成。您已经找到了想要的一行。

现在,让我们获取一个“范围”的行。 (示例:WHERE id BETWEEN 1234 and 9876WHERE 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有更多信息。