这个问题以前经常面试别人,大多数的回答都是非常浅的。只回答重复度低的,为什么重复度低的就适合采用索引,好像很少有人能答出来。
先说一个前提,所有的系统瓶颈最终都落在io上,包括网络io和磁盘io,例如,一台机器cpu每秒可以执行5亿条指令,如果是7200转的磁盘的话,一分钟7200转,一转1/120秒,大概要9-11毫秒的样子。换句话说,一次磁盘访问的时间大概是40万条指令。所以我们希望的是能充分利用cpu,减少磁盘的访问次数。B+tree正好符合这一场景,增加了运算次数,减少了数据读取的次数。
关系型数据库大多采用的索引算法就是B+tree,树天生就是解决查找问题的,数据的重复度越低,越能体现出价值。对于重复的数据,只能使用rowid标示一下。