1.索引的定义:对数据库中某一列或多列(创建索引时指定)中的值进行排序并与表中结构一一映射的数据结构。
2.索引失效的场合:1.使用like%模糊查询的时候,包括‘%aaa’和‘%aaa%’,则不会走索引,但是‘aaa%’可以走索引;2.查询语句中使用了is not null或者<>不等于比较运算符;3.对索引列使用了运算/函数的时候;4.如果索引是组合索引,如果创建索引的第一列没有保护在where子句中。
3.分类:聚簇索引和非聚簇索引,聚簇索引是按照数据存放的物理位置为顺序的。聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的查询很快。
4.何时使用聚簇索引或非聚簇索引:
动作描述 | 使用聚集索引 | 使用非聚集索引 |
列经常被分组排序 | 使用 | 使用 |
返回某范围内的数据 | 使用 | 不使用 |
一个或极少不同值 | 不使用 | 不使用 |
小数目的不同值 | 使用 | 不使用 |
大数目的不同值 | 不使用 | 使用 |
频繁更新的列 | 不使用 | 使用 |
外键列 | 使用 | 使用 |
主键列 | 使用 | 使用 |
频繁修改索引列 | 不使用 | 使用 |
5.索引不会包含null值的列。MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。
6.索引的缺点:1.创建索引和维护索引需要时间。2.索引需要占物理空间。3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护。