data file一般是顺序文件(sequential file), 也就是说在磁盘中这个文件内部是按某个key排序的。
primary index(主索引)的key就是顺序文件的key. 主索引文件的排序方式与数据文件的排序方式相同. 如果要根据primary index查找key=6的记录,由于排序方式相同,你会发现所有key=6的记录都在一个block中或者几个连续的block中。
而secondary index(副索引)没有这个特性,它的key不是顺序文件的排序key, 也就是说副索引文件的排序方式与数据文件的排序方式并不一致。如果根据secondary index查找key=6的记录,由于排序方式不同,你会发现所有key=6的记录未必在同一个block中,也未必在几个连续的block中。
可以看出,使用secondary index对非唯一性字段进行查找时,由于目标记录不在同一个block中,也不在连续的几个block中,磁盘I/O的时间比起基于primary index的查找过程会多很多。 同理可知,对于范围查找如 key between 7 and 10, secondary index 也有相同的劣势。