首先要思考两个问题:
如何在字典中查找指定偏旁的汉字?如何在一本书中查找某内容?对于这两个问题大家都不陌生:在字典中查找指定偏旁的汉字时,首先查询目录中指定的偏旁位置,再查询指定笔画的汉字,最后目录中提供的页码找到这个汉字;在书中查询某内容时,首先在目录中查询该内容所属的知识点,然后根据该知识点所对应的页码快速找到要查询的内容。
而在数据库中也可以建立类似目录的数据库对象,实现数据的快速查询,这就是索引。索引是将表中的一个或者多个字段的值按照特定的结构进行排序然后存储。
我们为什么要使用索引:(这是一个值得深思的问题)
使用索引到底有什么好处呢?如果没有索引,在查找某条记录时,MySQL 必须从表的第一条记录开始,然后通读整个表直到找到相关的记录。如果表越大,那么查找记录所耗费的时间就越多。如果有索引,那么 MySQL 可以快速定位目标记录所在的位置,而不必去浏览表中的每一条记录,效率远远超过没有索引时的搜索效率。
所以索引有自己专门的存储空间,与表独立存放。MySQL 中的索引主要支持以下三种存储方式:
(1) B-Tree 存储结构:使用最多的一种存储结构,使用 B-Tree 存储结构的索引的所有结点都按照 Balance Tree 的数据结构来存储,索引数据结点都在叶子结点。B-Tree 的基本思想是:所有值(被索引的字段)都是排过序的,每个叶结点到根结点距离相等。所以 B-Tree适合用来查找某一范围内的数据,而且可以直接支持数据排序(ORDER BY)。但是当索引为多字段时,字段的顺序特别重要。如图 6-1 所示,为 B-Tree 的存储结构示意图。