如何获取mysql index MySQL 中特定表的值?
"Most MySQL indexes (PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT) are stored in B-trees."
正如您可以在文档中查看的那样,它是 B 树?
最佳答案
研究 BTree。更具体地说,B+树。
让我们通过 BTree 索引搜索单个项目。 BTree 有一个根节点;从那里开始。它可能有 100 个指向子节点的链接以及每个子节点中可找到的值范围的信息。您进入适当的子节点。对于一张小 table ,你就完成了。但对于一张巨大的 table ,你需要重复这个过程几次。 (对于具有万亿行的表,可能需要 6 次迭代。)完成。您已找到所需的一行。
现在,让我们获取行的“范围”。 (示例:WHERE id BETWEEN 1234 和 9876
或 WHERE name LIKE 'T%'
执行上述操作以查找范围中的第一个记录,然后转到“下一条”记录在您所在的底部(“叶”)节点中。这很好,直到您用完叶节点中的记录为止。
B+Tree
中的 +
如何发挥作用。这意味着存在从该节点到底层“下一个”节点的链接。所以继续范围查询是相当快的。
“扇出”为 100 的百万行表的统计信息:
要查找特定项目:需要触及 3 个节点(在 InnoDB 中为 16KB block )。
要获取 500 个连续行:需要 3 个节点才能到达开头;然后再向前扫描大约 5 个。
比较...如果没有索引,则需要扫描整个表约 10,000 个 block (1M/100)。这对于上述任一假设查询都是必需的。
在 InnoDB(在 MySQL 中)中,几乎所有创建的键都是 PRIMARY KEY、UNIQUE 和 INDEX。这些是B+树;没有选择(与其他供应商不同)。除此之外,FULLTEXT 中还有 SPATIAL;它们更复杂。
如果您执行SHOW CREATE TABLE foo
,您将获得一些有关索引的信息。 `information_schema 有更多信息。
关于mysql - 如何从mysql获取特定表的索引值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400402/