一、谈谈你对索引的理解
索引是一种用于快速查询和检索数据的数据库存储结构,他保存了数据库指定字段的数据位置
二、常见的两种索引结构
MySql
中常见的两种索引结构:B+TREE索引和HASH索引;
1、B+TREE索引
特点:
- 所有的节点都是按递增顺序排列的,遵循左小右大的原则;
- 数据data存储在叶子节点中,叶子节点中包含了所有节点元素的值;
- 每一个父节点的值都包含在子节点中,是最大或最小的那个值;
- 每一个叶子节点,都有一个指向下一个叶子节点的指针,形成了有序链表。
查找:
- 首先在根节点进行二分查找,找到对应的叶子节点;
- 在叶子节点上进行二分查找,找出key所对应的data。(由于叶子节点形成了有序链表,可以通过指针继续遍历相邻的叶子节点,提高查找效率。)
2、HASH索引
哈希索引又称为散列索引,基于哈希表实现,目前仅有MEMORY存储引擎和HEAP存储引擎支持这类索引;
特点:
- 无法用于排序与分组;
- 只支持精确查找,无法用于部分查找和范围查找。
三、索引的分类
按照逻辑划分:普通索引、唯一索引、主键索引、全文索引;
按照实际使用划分:单列索引、组合索引。
四、索引的优缺点
优点:
- 可以加快数据的检索速度;
- 通过创建唯一性索引,保证了数据库中每一行数据的唯一性。
缺点:
- 创建和维护索引需要耗费大量时间,在进行表的增删改的时候,如果存在索引,则需要对索引也进行动态的修改,降低了SQL的执行效率;
- 索引需要使用物理文件存储,会耗费空间;
- 在数据表数据体量不大的情况下,索引并不一定比全表查询快。