索引是用于快速查询和检索数据的数据库存储结构,保存数据库指定字段的数据位置,类似于图书目录的作用;按照存储方式分为B+树索引(对树查找,查找速度快,可用于分组和排序)和Hash索引(用于精确查找,无法进行范围查找和排序分组);按照使用的字段数量分为组合索引、单列索引;按照逻辑方式分为主键索引、辅助索引(唯一索引、普通索引、前缀索引、全文索引)
优点:加快数据的检索速度、减少数据库扫描行数;创建唯一索引,可以保证行数据的唯一性;
缺点:创建索引和维护索引需要很多时间,当对索引列的数据进行增删改时,其索引也会动态修改,降低了SQL执行效率;当数据量小的时候,全表扫描和走索引扫描区别很小;
引可选的数据结构:
- 二叉树
- 红黑树
- hash
- B-tree
InnoDB引擎中,索引的底层数据结构是B+树;
B+树特点:
- 所有数据按照递增顺序排列,左小右大;
- 数据存在叶子节点中;
- 叶子节点包含所有节点元素值;
- 每一个叶子节点都持有一个指向下一个的指针,形成有序列表;
- 每一个父节点的值,都包含在子节点中,是子节点的最大或最小值;
B+树的查找操作:
首先在根节点进行二分查找,找到对应的叶子节点,再在叶子节点进行二分查找,找到Key对应的data;
区间查找时,由于叶子节点是有序链表,可以通过指针继续查找遍历相邻叶子节点;