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)”由于B-树结构,无论您有多少行,复杂性都无法达到读取的
O(n)
。这是一本很好的书,伊姆霍