索引是什么?
索引是存储引擎用于快速找到记录的一种数据结构。
索引以文件的形式储存在磁盘中。索引可以包含一个或多个列的值。存储引擎查询数据的时候,先在索引中找对应值,然后根据匹配的索引记录找到对应的数据行。
为什么要使用索引(索引的优点)?
- 提升数据的查询速度,大大减少了服务器需要扫描的数据量
- 可以减少帮助服务器避免排序和临时表
- 可以将随机IO变为顺序IO
索引的类型
1. B-Tree索引
- 大多数说,提到索引,都指的是B-Tree索引
- 所有的值都是按顺序存储的,每一个叶子页到根得到距离相同,很适合查找范围数据。
- 从索引的根节点开始进行搜索,通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,最终要么找到值,要么不存在。
- 可以用于查询中的order by 操作;如果B-Tree可以按照某种方式查找值,那么也可以按照该种方式进行排序。
2. 哈希索引
- 对每一行数据,存储引擎都会对所有的索引列计算一个哈希码;哈希索引将所有的哈希码和行指针存储在索引中。
- 索引数据不是按顺序存储的,所以无法用于排序,范围查询
- 始终使用索引列的全部内容来计算哈希值
- 访问哈希索引的数据非常快,当有哈希冲突的时候,会遍历所有的行指针
MyISAM和InnoDB存储引擎:只支持BTREE索引, 也就是说默认使用BTREE,不能够更换
MEMORY/HEAP存储引擎:支持HASH和BTREE索引
3. 索引的操作
https://www.cnblogs.com/whgk/p/6179612.html
- 创建索引
- 增加索引
- 删除索引
4. 索引的缺点
-
创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加
-
索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值
-
当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。