索引
什么是索引
索引是数据库管理系统(DBMS)中一种用于提高查询速度的数据结构。它类似于书籍中的目录,可以快速定位到数据行,从而避免全表扫描,提高查询效率。索引本质上是对数据库表中一个或多个列的值进行排序的结构,它使得数据库在查询时可以更高效地找到所需的数据。
索引的作用
索引的主要作用是加速数据库查询操作,具体包括:
提高查询效率:通过索引可以减少数据库检索数据所需的时间。
优化排序操作:对有排序要求的查询,可以通过索引减少排序所消耗的时间。
加速表连接:多表连接查询时,索引可以加速连接操作,尤其是当连接的字段已经有索引时。
加速分组、聚合操作:索引可以加速 GROUP BY、ORDER BY、DISTINCT 等操作的执行速度。
索引的类型
索引类型可以按照3个层面进行划分
1.基本使用层面:主键索引,唯一索引,普通索引,联合索引,空间索引
2.数据结构层面:B+Tree索引,哈希索引,R-Tree索引
3.物理引擎层面:聚簇索引,非聚簇索引
基本使用层面
主键索引(Primary Key Index)
功能:主键索引用于保证表中每一行记录的唯一性,并且主键列不能包含 NULL 值。每个表只能有一个主键。
使用场景:通常用于唯一标识一条记录,比如用户表的 id 字段。
限制:每个表只能有一个主键索引,并且主键索引会隐式创建唯一索引。
唯一索引(Unique Index)
功能:唯一索引保证索引列的值唯一,但允许列包含 NULL 值。
使用场景:例如电子邮件、用户名等需要保证唯一性的字段。
限制:多个唯一索引可以存在于一个表中。
普通索引(Index)
功能:普通索引主要用于加速查询操作,不保证唯一性。
使用场景:一般用于查询频繁的列,尤其是经常出现在 WHERE 子句中的字段。
限制:没有唯一性约束,且在查询时能够提高检索速度。
全文索引(Fulltext Index)
功能:全文索引是专门针对文本内容进行索引的索引类型,可以加速对大文本字段的搜索。
使用场景:适用于对长文本、文章内容等进行全文检索的场景,例如搜索引擎。
限制:通常只能用于 CHAR、VARCHAR 或 TEXT 类型的列,且不适用于 InnoDB 存储引擎(MySQL 5.6 以下版本)。
组合索引(Composite Index)
功能:组合索引是指在多个列上创建一个索引,可以用于多个列的组合查询。
使用场景:查询中涉及多个列时,例如对 first_name 和 last_name 两个列进行联合查询。
限制:组合索引的顺序很重要,查询条件的列顺序需要与索引列的顺序一致。
空间索引(Spatial Index)
功能:专门用于存储和查询空间数据(如地理位置、地图坐标等)。
使用场景ÿ