什么是索引
索引(index)是帮助mysql高效获取数据的数据结构,mysql索引主要有两种结构:BTree索引和Hash索引,平时的索引一般都是BTree索引。
优点:
- 可以提高查询速度
- 创建唯一索引,保证数据唯一性
- 加速表与表的连接,特别是实现数据的参考完整性方面特别有意义
- 在使用分组和排序字句进行数据检索时同样可以显著减少查询中分组和排序的时间。
- 通过使用索引们可以在查询中的过程中,使用优化隐藏器,提高系统的性能
缺点:
- 占用空间
- 减缓增删改的速率
- 创建和维护需要耗费时间
索引的底层原理及失效情况
数据库索引,是数据库管理系统中的一个排序的数据结构,以协助快速查询,更新数据库表中的数据。索引的实现通常使用B数及其变种B+树
索引什么情况下会失效?
对列进行计算或使用函数
不匹配数据类型,会造成索引失效
where中使用is null或者is not null,会造成失效
使用了反向操作,该索引失效
使用link操作,索引会失效
where中有or,有一个列没有索引,那其他的索引不起作用
索引类型
主键索引
索引列中的值必须是唯一的,不允许空值
普通索引
mysql中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值
唯一索引
索引列中的值必须是唯一的,但允许为空
全文索引
只能在文本类型CHAR,VARCHAR,TEXT类型字段上创建全文索引,字段长度比较大时,如果创建普通的索引,在like模糊查询时效率比较低,这时可以创建全文索引。myISAM和InnoDB都可使用全文索引
空间索引
mysql在5.7之后支持空间索引,而且支持OpenGIS几何数据模型MySQL在空间索引这方面遵循OpenGIS稽核数据模型规则
前缀索引
在文本类型入CHAR,VARCHAR,TEXT类列上创建索引时,可以指定索引的长度。但是数值类型不能指定
其他(按照索引列数量的分类)
单列索引,组合索引