Mysql(innodb)的索引
索引的定义
索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据 库系统还维护者满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数 据结构上实现高级查找算法,这种数据结构就是索引。
索引类型(从数据结构角度)
1.HASH索引
-
什么是Hash(散列)?
hash就是一种(key=>value)形式的键值对,如数学中的函数映射,允许多个key对应相同的value,但不允许一个key对应多个value。
-
为什么能用作索引?
通过散列算法之后形成的key-value的键值对的查询速度是o(1),这是一种非常适合做查询的数据结构。
-
优缺点是什么?
优点:单个值查询速度快o(1)。
缺点:不适合做范围查询,范围查询的速度非常慢,它需要挨个将区间的值查询出来。
2.B+树索引(常用)
-
什么是B+树?
B+树是一种树数据结构,通常用于数据库和操作系统的文件系统中。B+树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间复杂度。
-
为什么能用作索引?
因为b+树这种数据结构的查询速度也是很快的o(logn),虽然没有hash的那么快,但是对于范围查询来说,这种索引比hash快很多。这就导致该数据结构查询效率非常稳定,所以适合做索引。
-
优缺点是什么?
优点:查询效率稳定
缺点:需求维护该树形结构,增删改操作都需要花费一定时间。且还需花费空间来存储。
索引优缺点
优点:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序;
劣势:索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要修改索引表;
索引的使用
1.索引需要覆盖到经常用作查询的字段
2.索引虽然可以加快查询,但是不是越多越好,会占用额为的维护成本
3.写sql语句时需要考虑到怎么去跟索引字段挂钩
.
.
.
.
.
.
…后续再加