转载:https://www.php.cn/faq/493277.html
一、数据结构区分
1.1.B+tree索引
根据存储方式,mysql可以分为B+tree索引和哈希索引
B+tree索引可以进行全键值、键值范围和键值前缀查询
1.2.哈希索引
哈希索引也称为散列索引或 HASH 索引。MySQL 目前仅有 MEMORY 存储引擎和 HEAP 存储引擎支持这类索引
哈希索引的特点是访问速度快,但也有缺点
1.计算哈希值比较费时
2.哈希值只能支持等值比较,=,!=,in,不支持范围查询
3.哈希索引不支持键的部分匹配
二、逻辑区分
2.1.普通索引
普通索引的目的是为了加快访问速度,普通索引允许在定义索引的列中插入重复值和空值。
创建普通索引时,通常使用的关键字是 INDEX 或 KEY
`create index std_id on student(id) `
2.2.唯一索引
唯一索引的目的是为了避免出现重复值,所以索引所在列不能有空值
创建普通索引一般使用unique
`create unique index std_uid on student(id)`
2.3.主键索引
主键索引是一种特殊的唯一索引,不允许有重复值和空值
创建主键索引通常使用 PRIMARY KEY 关键字
2.4.全文索引(full text)
全文索引主要勇于查找文本中的关键字,只能建立在char,varchar,text类型的列上,且mysql只有myisam支持全文索引
全文索引非常耗时和占用存储空间.
创建全文索引使用fulltext关键字
`create fulltext index info_id on student(info)`
2.5.空间索引
空间索引是对空间数据类型建立的索引,使用SPATIAL关键字进行创建,且只有MYISAM引擎支持空间索引
空间索引主要用于地理空间数据类型 GEOMETRY。而且索引列必须声明为not null,
`create spatial index stu_line_id on student(line)`
三、使用区分
3.1.单列索引
建立在某一列上的索引就是单列索引
3.2.复合索引(多列索引)
建立在2列或多列上的索引是复合索引,例如
`create index std_na on stduent(name,address)`
该索引指向创建时对应的多个字段,可以通过这几个字段进行查询。
但是,只有查询条件中使用了这些字段中第一个字段时(name),索引才会被使用。
四、物理存储
4.1.聚簇索引
按照索引的每个叶子节点存储的是否为完整表数据,分为聚簇索引和二级索引
InnoDB表要求必须有聚簇索引,默认在主键字段上建立聚簇索引.
以MyISAM为存储引擎的表不存在聚簇索引。
MyISAM表中的主键索引和非主键索引的结构是一样的,索引的叶子节点不存储表数据,存放的是表数据的地址。所以,MyISAM表可以没有主键。
4.2.辅助索引(二级索引)
二级索引的叶子节点不存储一行完整数据,只存储聚簇索引的值
标签:存储,聚簇,全文索引,索引,哈希,mysql,主键 From: https://www.cnblogs.com/wangbin2188/p/17673961.html