1、MySQL有哪些索引?
1.1、数据结构角度
BTREE、HASH、FULLTEXT、R-TREE
BTREE:B树是为了磁盘或其它存储设备而设计的一种多叉平衡查找树。(相对于二叉,B树每个内节点有多个分支,即多叉),B树又可以写成B-树/B-Tree,并不是B‘减’树,横杠为连接符,容易被误导
一颗m阶B-tree的特性
m阶的定义:一个节点能拥有的最大子节点数来表示这棵树的阶数
eg.如果一个节点最多有n个key,那么这个节点最多就会有n+1个子节点,这颗树就叫做n+1(m=n+1)阶树
1.2、物理存储角度
1.3、逻辑存储角度
- 普通索引:仅加速查询
- 唯一索引:加速查询+列值唯一(可以有null)
- 主键索引:加速查询+列值唯一(不可以有null)+表中只有一个
- 组合索引:组合索引,多列值组成一个索引,专门用于组合搜索,其效率大于索引合并
- 全文索引:对文本的内容进行分词,进行搜索
索引的优缺点
优点:
可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序;
缺点:
索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要修改索引表;
