B+树索引
B+树索引是MySQL中广泛采用的数据结构,它将所有实际数据存储在叶子节点上,形成一个有序链表结构。B+树索引的查询复杂度为O(logn),非常适合执行范围查询操作,因其索引结构能高效地对区间内的数据进行遍历。
- B+树索引特点:
- 叶子节点包含所有数据,且叶子节点间通过指针连接,便于范围查询。
- 查询效率稳定,复杂度为O(logn)。
- 适合用于大数据量、范围查询和排序操作。
哈希索引
哈希索引利用哈希函数将数据映射到哈希表中,特别适用于等值查询场景,查询效率接近于O(1),查找速度快且精确。但它不支持范围查询和排序操作。
- 哈希索引特点:
- 适用于等值查询,查找速度快。
- 不支持范围查询和排序,也不具备顺序性。
全文索引
全文索引主要应用于对文本内容进行模糊查询和关键词检索,通常建立在CHAR、VARCHAR或TEXT类型字段上。MySQL的MyISAM和InnoDB存储引擎均支持全文索引。
- 全文索引特点:
- 适用于对大量文本数据进行全文搜索。
- 提供词组匹配、同义词搜索等高级功能。
R-Tree索引
R-Tree索引是专门针对地理空间数据类型(GIS数据)设计的索引,MySQL通过SPATIAL索引实现。它能够加速对空间数据的查询,如点、线、面的空间关系判断。
- R-Tree索引特点:
- 应用于GIS数据类型,支持空间对象的索引和检索。
- 有助于提高地理空间查询的性能。
物理存储维度的索引
聚集索引(Clustered Index)
-
聚集索引以表的主键创建,数据行的实际内容就按主键的顺序存储在叶子节点上,查询主键的速度非常快。
-
聚集索引特点:
- 数据行物理存储按照索引键值排序。
- 主键查询效率极高,辅助索引查询需二次查找。
非聚集索引(Non-clustered Index)
-
非聚集索引则是基于非主键字段创建,叶子节点存储的是主键值和索引列的值。
-
非聚集索引特点:
- 数据行物理存储不受索引键值排序影响。
- 查询非主键列时,先找到索引值,再通过主键值去聚集索引中定位数据行。
逻辑维度的索引类型
主键索引(Primary Key Index)
-
主键索引是一个特殊的唯一索引,不允许有空值,并且每个表只能有一个主键索引。
-
主键索引特点:
- 唯一且非空。
- 自动成为聚集索引(InnoDB存储引擎)。
普通索引(Regular Index)
-
普通索引是最基础的索引类型,允许空值和重复值。
-
普通索引特点:
- 不要求唯一性,允许多个相同的索引键值。
- 适用于大部分查询场景,尤其是数据重复率高的字段。
联合索引(Composite/Index)
-
联合索引是由多个字段组成的索引,查询时遵循最左前缀原则。
-
联合索引特点:
- 可以跨越多个字段,提高多字段查询效率。
- 最左优先原则,查询时需按照索引字段的顺序进行。
唯一索引(Unique Index)
-
唯一索引要求索引列中的值必须是唯一的,但允许为空值。
-
唯一索引特点:
- 防止重复数据插入,保证列数据唯一性。
- 可以用于替代主键索引,前提是满足业务场景要求。
空间索引(Spatial Index)
-
空间索引在MySQL 5.7及以后版本中支持,遵循OpenGIS几何数据模型规则,用于空间数据的索引。
-
空间索引特点:
- 提高对空间数据类型的查询性能。
- 支持点、线、面等多种空间数据的索引和查询。