目录
1.1 索引是什么
MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构
索引的本质:索引是数据结构。你可以简单理解为“排好序的快速查找数据结构”,满足特定查找算法。 这些数据结构以某种方式指向数据, 这样就可以在这些数据结构的基础上实现 高级查找算法 。
自己的理解:把数据比作成一本书,索引就是书的目录。
1.2 索引的优点
(1) 提高数据检索效率,降低数据库的IO成本。
(2) 在使用分组和排序子句进行数据查询时,可以显著 减少查询中分组和排序的时 间 ,降低了CPU的消耗。
1.3 索引的缺点
(1) 创建索引和维护索引要耗费时间 ,并且随着数据量的增加,所耗费的时间也会增加。
(2) 索引需要占用磁盘空间,,除了数据表占数据空间之 外,每一个索引还要占一定的物理空间, 存储在磁盘上 ,如果有大量的索引,索引文件就可能比数据文 件更快达到最大文件尺寸。
(3) 虽然索引大大提高了查询速度,同时却会 降低更新表的速度 。当对表 中的数据进行增加、删除和修改的时候,索引也要动态地维护,这样就降低了数据的维护速度。
1.4 哪些情况适合创建索引
(1) 字段的数值有唯一性的限制
(2) 频繁作为 WHERE 查询条件的字段
(3) 经常 GROUP BY 和 ORDER BY 的列
(4) UPDATE、DELETE 的 WHERE 条件列
对数据按照某个条件进行查询后再进行 UPDATE 或 DELETE 的操作,如果对 WHERE 字段创建了索引,就 能大幅提升效率。原理是因为我们需要先根据 WHERE 条件列检索出来这条记录,然后再对它进行更新或 删除。如果进行更新的时候,更新的字段是非索引字段,提升的效率会更明显,这是因为非索引字段更 新不需要对索引进行维护。
(5) DISTINCT 字段需要创建索引
1.5 哪些情况不适合创建索引
(1) 在where中使用不到的字段,不要设置索引
(2) 数据量小的表最好不要使用索引
(3) 有大量重复数据的列上不要建立索引
(4) 避免对经常更新的表创建过多的索引
(5) 不建议用无序的值作为索引
1.6索引主要有哪几种分类?
MySQL主要的几种索引类型:1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引。
- 普通索引: 是最基本的索引,它没有任何限制
- 唯一索引: 索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
- 主键索引: 是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。
- 组合索引: 一个索引包含多个列,实际开发中推荐使用组合索引。
- 全文索引: 全文搜索的索引。FULLTEXT 用于搜索很长一篇文章的时候,效果最好。只能用于InnoDB或MyISAM表,只能为CHAR、VARCHAR、TEXT列创建.
主键索引和唯一索引的区别:
主键必唯一,但是唯一索引不一定是主键;
一张表上只能有一个主键,但是可以有一个或多个唯一索引。