MySql的索引(3)

使用磁盘 I/O 次数来评价索引结构的优劣

B- Tree 检索一次最多要访问 h 个节点,B-Tree将一个节点的大小设置一个页,这就保证一个节点物理上存储在一个页里面,并且计算机存储分配都是按页对齐的,所以一个node只要一次I/O。

即B-Tree检索一次最多需要 h - 1次I/O(根节点常驻内存)。渐进复杂度为O(h) = O(logdN)

扩展:

局部原理与磁盘预读

由于存储介质的特性,磁盘的存取比主存慢很多,因此为提高效率就要减少头盘I/O。为此磁盘往往不是严格按需读取,而是每次预读,即:可能只要一个字节的数据,其也会从这位置开始读取一定长度的数据放入内存 - 这就是局部性原理的实现 => 当一个数据被用到时,其附近的数据通常会马上被使用。

由于磁盘的顺序读取效率很高,对于具有局部性的程序来说,预计可以提高I/O效率。

预读的长度一般是页(page)的整数陪,主存与磁盘以页为单位交换数据,当主存中不存在数据时,就会给磁盘发送指令读取数据位置前后连续一页或几页的数据到内存中