概念
- 概念
索引是一种特殊的文件,包含着对数据表里的所有记录的引用指针.可以对表中一系列或多列创建索引.并指定索引类型,各类索引有各自的数据结构实现.
- 作用
1.类似于书籍目录
2. 索引可用于快速定位,检索数据
3. 索引对提高数据库的性能有很大帮助
使用
1.如果没有索引,那么查找方式就是顺序查找,时间复杂度过高,通过索引避免出现顺序遍历的情况.
2. 数据结构中,哈希表和二叉搜索树都能实现较快查找,那么为什么SQL不使用这两者呢?
- 哈希表:不能处理数据库的模糊匹配问题,哈希查找需要明确的知道key是什么,从而通过hash函数的到下标,从而查找数据.
- 二叉搜索树:二叉搜索树虽然能够实现模糊匹配,但是当待查找的元素过多时,树的高度就会指数增长,时间复杂度也会相应变高.
3.MySQL中使用 B+树 (N叉搜索树) 来进行索引.
B树/B-树 :
B树有以下特点:
- 不再是二叉搜索,而是N叉搜索,树的高度会降低,查询快
- 叶子节点,非叶子节点,都可以存储数据,且可以存储多个数据
- 通过中序遍历,可以访问树上所有节点
- 每个节点都可以储存多个数据, 这些多个数据就划分出了一定的区间, 数据通过这些区间来摆放, 在搜索的时候就不用访问那么多的叶子节点, 而是直接在更加细化的区间里面去查找, 这样就减小了查找效率.
B+树
B+树是对B数的一种延伸.
B+树的特点:
- B树中非叶子结点也可能存储数据,而B+树的数据一定在叶子结点上,非叶子结点只是用来进行辅助的.
- B+树中每层兄弟结点之间都是相互连通的,类似于链表,方便遍历,在进行指定区间查找元素时,不需要中序遍历,使用链表的next节点就可以快速访问到.
索引的使用场景
创建索引时,要考虑一下几点:
- 数据量较大,且经常对这些列进行条件查询
- 该数据库表的插入操作,以及对这些列的修改操作频率较低.(查询多,修改少)
- 索引会占用一定的额外磁盘空间
当满足以上条件时,就考虑在表中的这些字段创建索引,可以提高查询效率,反之,如果查询少而插入修改对,或者磁盘内存不足,就不考虑创建索引.
使用
1.在MySQL中,创建主键约束,唯一约束,外键约束时,就会自动创建其对应列的索引.
2.如果是创建非主键约束,非唯一约束,非外键约束时,也可以自行创建普通索引.
3.主键索引的效率比其他列的索引效率更高.
- 查看索引
show index from 表名;
- 创建索引
create index 索引名 on 表名(字段名);
- 删除索引
drop index 索引名 on 表名;
面试
大佬的文章,多瞅瞅
https://blog.csdn.net/bjweimengshu/article/details/105108585