索引是什么
索引类似于目录,如果表中没有索引,查询语句会从第一条记录开始查找,直到找到需要的数据为止。有了索引后,会根据索引快速定位,加快查询的效率。
索引的类型
按照功能分为:
- 主键索引:一张表只有一个,唯一索引的基础上增加了NOT NULL的约束
- 唯一索引:普通索引的基础上增加了唯一性约束,一张表可以有多个
- 普通索引:基础的索引,没有任何约束,主要用于提高查询效率
- 全文索引:只有char、varchar、text字段可以建立全文索引,只支持英文
- 联合索引:多个索引以最左匹配原则排列组合为一个索引
按照结构分为:
- 聚集索引:一张表只有一个,叶子节点存储的是数据记录,查询效率高,但插入,删除,更新等操作的效率比非聚集索引低
- 非聚集索引:一张表可以有多个,叶子节点存储的是数据位置,执行查询时会先查找到主键的值(聚集索引),然后再根据位置找到数据记录(先查找主键的值的过程被称为回表)
回表查询
先通过普通索引的值定位聚集索引值,再通过聚集索引的值定位行记录数据,需要扫描两次索引B+树,它的性能较扫一遍索引树更低。
避免回表查询:索引覆盖