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

xa9qqrwz  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(532)

如何从mysql中获取特定表的mysql索引值?
大多数mysql索引(主键、唯一、索引和全文)都存储在b树中
您可以在文档中查看它是b树吗?

wvyml7n5

wvyml7n51#

研究btrees。更具体地说,b+树。
让我们通过btree索引搜索单个项。一个btree有一个根节点;从那里开始。它可能有100个到子节点的链接,以及在每个子节点中找到的值范围的信息。进入相应的子节点。一张小table,你就完了。但是对于一张大table,你要重复这个过程几次(对于一个有一万亿行的表,可能需要6次迭代。你已经找到你想要的那一排了。
现在,让我们获取一个“范围”的行(例子: WHERE id BETWEEN 1234 and 9876 或者 WHERE name LIKE 'T%' 执行上述操作以查找范围的第一个,然后转到您所在的底部(“叶”)节点中的“下一个”记录。在叶节点中的记录用完之前,这是正常的。
怎么了 +B+Tree 开始了。这意味着从这个节点到底层的“下一个”节点有一个链接。因此,继续范围查询非常快。
“扇出”为100的百万行表的统计信息:
要查找特定项:需要触摸3个节点(innodb为16kb块)。
获取500个连续行:3个节点到达起点;然后再向前扫描5次。
比较。。。如果没有索引,则需要扫描大约10000个块(1m/100)的整个表。这对于上面的任何一个假设查询都是必需的。
在innodb(mysql)中,几乎所有的键都是主键、唯一键和索引键。那些是b+树;没有选择(与其他供应商不同)。除此之外,全文中还存在着空间性;它们更复杂。
如果你这样做了 SHOW CREATE TABLE foo ,您将获得有关索引的一些信息`信息\u schema有更多信息。

相关问题