研究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有更多信息。
1条答案
按热度按时间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有更多信息。