mysql索引(转)

转载: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.辅助索引(二级索引)

二级索引的叶子节点不存储一行完整数据,只存储聚簇索引的值

 

posted @   Mars.wang  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2022-09-02 spring使用websocket(转)
点击右上角即可分享
微信分享提示