不使用索引会怎样呢?使用了索引又会如何?
假如不使用索引,那么当查找一行记录时,会怎样操作呢?我想到三种方法。
第一种方式:把所有页都加载至内存中,再进行精确的定位和查找。这种方式存在很大的问题,因为我们要查找的行显然只在某一页上,而把所有页都加载进内存,如果数据量很大,内存很可能都装不下这么多页的数据,就算内存能够存储,也只是冗余地加载很多页。
第二种方式:先加载一页的数据,在内存中对这一页进行查找 如果找不到想要查找的行,再加载第二页,第三页,……运气差一点,直到加载最后一页才能够确定想要查找的记录是否存在。这种方式页也存在很大的问题,就是频繁的进行io操作,造成io冗余。
第三种方式:一次加载几页数据,在内存中进行精确查找,如果找不到想要查找的行,再加载下一组,……,如此反复执行。这种方式每次加载的数据量比第一种少,但仍然会加载冗余的页,还有可能进行多次io操作。显然也不合适。
而如果使用了索引,那么当查找某一行记录时,便可经过很少次数的io就定位到所要查找的行所在的页,并且只需要加载这一页的记录至内存中,在内存中再进行精确的后续操作。这种方式避免了冗余地加载页,同时也避免了大量的、不必要的io操作,从而提高查询效率。