1. 为什么使用索引?
索引就是为了提高数据查询的效率,就像书的目录一样。
2. 索引的常见模型
哈希表 哈希表是一种以键-值存储数据的结构,输入key,便可以找到对应的value。区间查询需全表扫描,效率低。适用于只有等值查找的场景,比如 Memcached以及其他的NoSQL引擎
有序数组
按顺序存储,在等值查询和范围查询场景中的性能就都非常优秀。但是更新数据行必须移动插入记录后的所有记录,成本太高。只适用于静态存储引擎,存储不会再更新的数据。
搜索树 二叉搜索树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子。因为索引不止存在内存中,还要写在磁盘上,查询为了尽量少的读磁盘,我们要使用N叉树,N取决于数据块的大小。
MYSQL的InnoDB使用的是B+树,每一个索引对应一棵B+树
B+ 树能够很好地配合磁盘的读写特性,减少单次查询的磁盘访问次数。
3. 索引类型
主键索引(聚簇索引)
主键索引的叶子节点存的是整行数据
非主键索引(二级索引)
非主键索引的叶子节点内容是主键的值
基于主键索引和普通索引的查询有什么区别?
主键查询只需要搜索ID的索引树;普通索引需要先搜索字段的索引树得到ID值,再到ID索引树搜索一次,这个过程成为回表(需要多扫描一棵索引树);
从性能和存储方面考量,自增主键往往是更合理的选择。
总结
理解索引的模型和索引的类型
原文地址:https://time.geekbang.org/column/article/69236(极客时间付费专栏)