MySQL中的索引类型主要有以下几种:
- 普通索引(NORMAL) :
-
普通索引是最基本的索引类型,没有任何唯一性限制,可以创建在任何数据类型的列上。
-
普通索引适用于需要提升查询速度但不强制要求数据唯一性的场景。
- 唯一索引(UNIQUE) :
-
唯一索引要求索引列的值必须唯一,但允许有空值(NULL值可以存在多个)。
-
唯一索引可以确保表中的某一列或多列组合的值不会重复。
-
主键索引是一种特殊类型的唯一索引,表中创建主键时自动创建,一个表只能有一个主键。
- 全文索引(FULLTEXT) :
-
全文索引用于对文本内容进行搜索,适用于大型文本数据的检索。
-
全文索引只能用于MyISAM和InnoDB存储引擎的VARCHAR、CHAR和TEXT类型的列。
- 空间索引(SPATIAL) :
-
空间索引是用于地理空间数据类型字段创建的索引,主要用于MyISAM存储引擎。
-
空间索引支持空间查询,例如计算两点之间的距离等。
- 聚集索引(CLUSTERED INDEX) :
-
聚集索引决定了数据在表中的物理存储顺序,通常基于主键创建。
-
如果没有定义主键,InnoDB会选择第一个非空的唯一索引代替,如果没有非空的唯一索引,则InnoDB会隐式定义一个ROW ID代替。
-
聚集索引占用的空间最大,因为它保存了全部数据。
- 辅助索引(SECONDARY INDEX) :
-
辅助索引也称为二级索引,单张表可以有多个。
-
辅助索引的叶子节点存储的是对应索引字段的键值和主键ID,而不是整行数据。
- 哈希索引(HASH INDEX) :
-
哈希索引基于哈希表实现,支持全值匹配查询,但不支持范围查询和前缀匹配。
-
哈希索引通过计算索引列的哈希值来定位数据行,具有高效的查找性能。
这些索引类型在不同的使用场景下有不同的优势,选择合适的索引类型可以显著提高数据库查询的性能。