mysql索引通过B+Tree实现,叶节点通过链表顺序连接(与B树不同),hash索引不支持范围查找和排序等功能。
磁盘本身存取就比主存慢很多,再加上机械运动耗费,因此为了提高效率,要尽量减少磁盘I/O,减少读写操作。为了达到这个目的,磁盘往往不是严格按需读取,而是每次都会预读,即使只需要一个字节,磁盘也会从这个位置开始,顺序向后读取一定长度的数据放入内存。这样做的理论依据是计算机科学中著名的局部性原理:当一个数据被用到时,其附近的数据也通常会马上被使用。
叶节点申请的空间就相当于内存的一块(512),磁盘IO读取一取整块,相对的可以增加命中率。
索引文件和数据文件是分离的。
“一句话就是,二叉树可以方便查找是吧,logn复杂度。。。B树也需要类似的复杂度logn,但是它比较扁,所以读取磁盘数量少”——@。
B+是体现在索引还是在内存中也要建一个B+树呢?