索引按照业务逻辑分为 普通索引、唯一索引、主键索引和全文索引。前三种都是一类索引,只不过对数据的约束性更强。普通索引没有约束,唯一索引要求数据唯一性,关键字在此之上还要求不为空(只能有一个主键索引,因为数据存储文件只能按照一种顺序进行存储)。
按照物理实现方式 分为聚集索引和非聚集索引。
聚集索引可以按照主键来排序存储数据,这样查找更有效。
而非聚集索引有单独的存放空间,索引项按照顺序存储,但索引项指向的内容是随机存储的,就是系统会进行两次查找,第一次先找到索引,第二次找到索引对应的位置取出数据行。
非聚集索引不会把索引指向的内容像聚集索引一样直接放到索引的后面,而是维护单独的索引表(只维护索引,不维护索引指向的数据)
- 聚集索引的叶子节点存储的就是我们的数据记录,非聚集索引的叶子结点存储的是数据位置。非聚集索引不会影响数据表的物理存储顺序。
- 一个表只能有一个聚集索引,因为只能有一种排序存储方式,但可以有多个非聚集索引,也就是多个索引目录提供数据检索。
- 使用聚集索引的时候,数据的查询效率高,但如果对数据进行插入、删除、更新等操作,效率会比非聚集索引低。
对 WHERE 字句的字段建立索引,可以大幅提升查询效率。
采用聚集索引进行数据查询,比使用非聚集索引的查询效率略高,如果查询次数较多,尽量使用主键索引进行数据查询。
按照字段个数分为 单一索引和联合索引。
索引列为一列时为单一索引;多个列组合在一起创建的索引叫做联合索引。
联合索引存在最左匹配原则,就是按照最左有限的方式进行索引的匹配。