由于当前机器的内存越来越大,我们完全可以假设B树索引的所有非叶子页通常都会留在内存或者读缓存中。通常只有叶子页需要从磁盘驱动器读取。
如果非叶子页不在数据库缓冲池而在磁盘服务器的读缓存中,那么读取索引页可能会花费1ms。而一次磁盘随机读取所花费的时间大约是10ms。
误区一:索引层级不要超过5层。
由于非叶子页通常都会留在内存或者读缓存中,所以通常索引任意一个叶子页的时间为10ms~20ms,这是固定的。所以,对索引层数的限制是没有什么意义的。
误区二:单表的索引树不要超过6个
不应该给索引数目限制上线。
误区三:不应该索引不稳定的列
索引行是按索引键的顺序存储的,所以当索引键中有一列被更新时,DBMS可能不得不把相应的行从旧的索引位置移到心得位置来保证这一顺序。当四层索引的三个层级的非叶子页保留在内存中时,一次磁盘的随机读取需要10ms,响应的时间变成了2*10ms。此外,多列索引的尾列为不稳定的列,更新这个不稳定的列绝不会导致其迁移到新的子页。因此,在当前的磁盘条件下,更新一个不稳定的列只会对该更新操作增加10ms的响应时间。