问题与方案
在没有索引之前,想要查询到目标数据,通常采用直接按该字段中的顺序进行查找。读取磁盘数据到内存再进行判断的过程中,读取离散存储在不同页上数据带来了频繁的磁盘I/O问题。因此,为了减少不必要读取的数据,引入索引以减少磁盘I/O次数来提高查询效率。
概念
索引是帮助MySQL高效获取数据的数据结构。通过二叉树的基本数据结构,对数据进行排序,以满足二分法的快速查询算法。
特点
- 减少磁盘I/O
- 减少数据分组和排序的时间
- 保证数据唯一性
- 加速表与表之间的连接
- 索引的创建和维护所耗费的时间随着数据规模不断增加
- 增加了更新表所耗费的时间
- 索引的存储占用了磁盘空间
索引数据存储方式
数据存储结构
- 哈希 Hash
- AVL树 Binary Search Tree(平衡二叉搜索树)
- B树 Balance Tree(多路平衡查找树)
- B+树 Balance Tree(多路搜索树,MySQL针对数据库数据存储特化的Balance Tree)