MySQL 索引定义、原理、分类
索引定义
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
数据库索引好比是一本书的目录。
优点
- 大大提高数据查询速度。
- 可以提高数据检索的效率,降低数据库的IO成本,类似于书的目录。
- 通过索引列对数据进行排序,降低数据的排序成本降低了CPU的消耗。
- 被索引的列会自动进行排序,包括【单例索引】和【组合索引】,只是组合索引的排序需要复杂一些。
- 如果按照索引列的顺序进行排序,对 order 语句来说,效率就会提高很多。
缺点
- 索引会占据磁盘空间。
- 索引虽然会提高查询效率,但是会降低更新表的效率。比如每次对表进行增删改查操作,MySQL不仅要保存数据,还有保存或者更新对应的索引文件。
- 维护索引需要消耗数据库资源。
索引原理
以空间换时间
一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的。
数据库在未添加索引进行查询的时候默认是进行全文搜索,也就是说有多少数据就进行多少次查询。
索引分类
主键索引
设定为主键后,数据库自动建立索引,InnoDB 为聚簇索引,主键索引列值不能为空(Null)
唯一索引
索引列的值必须唯一,但允许有空值(Null),但只允许有一个空值(Null)
单列索引
单个列构成的索引
复合索引
多个列共同构成一个复合索引
全文索引
全文索引类型为 FULLTEXT,在定义索引的列上支持值的全文查找允许在这些索引列中插入重复值和空值
全文索引可以在Char、VarChar 上创建
Full Text(MySQL 5.7 之前,只有 MYISAM 存储引擎引擎支持全文索引)
空间索引
MySQL 在 5.7 之后的版本支持了空间索引,而且支持 OpenGIS 几何数据模型
MySQL 在空间索引遵循 OpenGIS 几何数据模型规则
前缀索引
在文本类型为char、varchar、text类列上创建索引时,可以指定索引列的长度(但是数值类型不能指定)