假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上随机分布,需要进行10^4次I/O,假设磁盘每次I/O时间为10ms(忽略数据传输时间),则总共需要100s(但实际上要好很多很多)。如果对之建立B-Tree索引,则只需要进行log100(10^6)=3次页面读取,最坏情况下耗时30ms
索引类型:
B-Tree索引: 可以
进行全关键字、关键字范围和关键字前缀查询
io次数取决于b+树的高度h, 而h的值等于以(m+1)为底对N的对数,其中N是当前表的总记录数,而m等于一个磁盘块存储的索引的的个数,所以索引越小,m就越大,h就越小,io次数就越少。
Hash索引:只用于Memory存储引擎
全文索引:只用于MyISAM引擎