MySQL 索引和数据访问时间复杂度
MySQL indexing and data access time complexity
在 MySQL
我读到当我们对特定数据列建立索引时数据访问时间复杂度是 log(n)
因为使用了 BTree,有没有数据访问时间变得更多的情况log(n)
例如 O(n)
,因为当我们以排序的方式将数据插入 BTree 时,树会在一侧生长,数据访问复杂性会增加到 O(n)
他们是否有任何关于插入数据的政策进入这个索引 BTree ??感谢您的回答
一些注意事项:
- 磁盘访问(对性能而言)远比 O() 重要。
- A "Rule of Thumb":一个节点有100个子节点(或叶元素)。因此...
- 在典型的 InnoDB BTree(数据或索引)中,一百万行 table 将只有大约 3 层深。对于 万亿 行,大约 6 个级别。这是 "log n" 发挥作用的主要地方。
- BTrees,如果自下而上增强,则保持平衡。
- 在MySQL中,不用担心BTrees;还有更糟糕的事情要处理——索引、查询的制定等
- InnoDB 使用
B+Trees
,通过不必在每次耗尽节点元素时向下钻取树来使索引扫描相当高效。
- 维基百科是另一个有用的参考资料。
在 MySQL
我读到当我们对特定数据列建立索引时数据访问时间复杂度是 log(n)
因为使用了 BTree,有没有数据访问时间变得更多的情况log(n)
例如 O(n)
,因为当我们以排序的方式将数据插入 BTree 时,树会在一侧生长,数据访问复杂性会增加到 O(n)
他们是否有任何关于插入数据的政策进入这个索引 BTree ??感谢您的回答
一些注意事项:
- 磁盘访问(对性能而言)远比 O() 重要。
- A "Rule of Thumb":一个节点有100个子节点(或叶元素)。因此...
- 在典型的 InnoDB BTree(数据或索引)中,一百万行 table 将只有大约 3 层深。对于 万亿 行,大约 6 个级别。这是 "log n" 发挥作用的主要地方。
- BTrees,如果自下而上增强,则保持平衡。
- 在MySQL中,不用担心BTrees;还有更糟糕的事情要处理——索引、查询的制定等
- InnoDB 使用
B+Trees
,通过不必在每次耗尽节点元素时向下钻取树来使索引扫描相当高效。 - 维基百科是另一个有用的参考资料。