MySQL索引和数据访问时间复杂性
在MySQL索引和数据访问时间复杂性,mysql,indexing,time,complexity-theory,Mysql,Indexing,Time,Complexity Theory,在MySQL中,我了解到,当我们对特定数据列进行索引时,数据访问时间的复杂性是log(n),因为使用了BTree,是否有任何情况下数据访问时间超过log(n)例如O(n),因为当我们以排序的方式将数据插入到一个BTree中时,树的一侧会增长,数据访问的复杂性会增长到O(n)他们是否有任何将数据插入到这个索引BTree中的策略??感谢您回答一些需要注意的问题: 磁盘访问(对性能)比O()重要得多 “经验法则”:一个节点有100个子节点(或叶元素)。因此 在一个典型的InnoDB BTree(数据
MySQL
中,我了解到,当我们对特定数据列进行索引时,数据访问时间的复杂性是log(n)
,因为使用了BTree,是否有任何情况下数据访问时间超过log(n)
例如O(n)
,因为当我们以排序的方式将数据插入到一个BTree中时,树的一侧会增长,数据访问的复杂性会增长到O(n)
他们是否有任何将数据插入到这个索引BTree中的策略??感谢您回答一些需要注意的问题:
- 磁盘访问(对性能)比O()重要得多
- “经验法则”:一个节点有100个子节点(或叶元素)。因此
- 在一个典型的InnoDB BTree(数据或索引)中,一个百万行表的深度只有3级左右。对于一万亿行,大约6个级别。这是“logn”发挥作用的主要地方
- B树,如果自底向上增加,保持平衡
- 在MySQL中,不要担心BTrees;还有更糟糕的事情需要处理——索引、查询公式等
- InnoDB使用
,使得索引扫描相当有效,因为每次它耗尽节点的元素时都不必向下钻取树B+树
- 维基百科是另一个有用的参考资料
O(n)
。这是一本很好的书,伊姆霍