了解了主键索引的底层原理,主键索引其实就是根据主键字段建立相关的数据结构(B+树),此后在使用主键字段作为条件查询时,会直接根据主键查找B+树的叶子结点。除了主键索引外,普通索引和唯一键索引也是如此,只不过普通索引要稍微绕一点,下面会具体介
了解了主键索引的底层原理,主键索引其实就是根据主键字段建立相关的数据结构(B+树),此后在使用主键字段作为条件查询时,会直接根据主键查找B+树的叶子结点。除了主键索引外,普通索引和唯一键索引也是如此,只不过普通索引要稍微绕一点,下面会具体介绍。
目录
略。主键索引的概念这里就不再赘述了,本质就是根据主键在B+树上查找叶子结点。
具体介绍参考:Mysql 索引(一)—— 主键索引的底层原理_仲夏夜之梦~的博客-CSDN博客
使用普通索引的场景:某个字段存在重复数据
主键索引是根据主键字段建立相关数据结构(B+树),而普通索引则是根据某个非主键字段建立对应的数据结构,此后检索时直接根据该非主键字段查找 B+ 树的叶子结点。普通索引属于非聚簇索引,不同存储引擎对应的普通索引的结构会有所不同。
MyISAM 普通索引的创建方式和主键索引是一样的,叶子结点不保存任何数据,只保存数据记录的地址。
InnoDB 普通索引和主键索引不一样,InnoDB 主键索引中叶子结点保存的是数据记录;而 InnoDB 普通索引中叶子结点保存的是主键索引值,后续要使用该主键索引值到主键索引中获取完整记录,这种方式叫回表查询。
使用唯一索引的前提条件:某个字段的内容不存在重复数据
(唯一索引使用的数据结构跟主键索引、普通索引是一样的,不同之处在于作为检索条件的字段不存在重复数据)
第一点,查询频繁的字段应该作为索引。因为索引的目的就是提高检索效率,如果某个字段被频繁使用,使用字段作为检索条件时就有必要提高检索效率。
第二点,更新频繁的字段不适合作为索引。索引的高效是以增删改的效率为代价的。
第三点,不作为检索条件的,不适合作为索引。如果该字段都不会作为条件用于检索,只会出现在结果中,那该字段不适合作为索引。
主键索引的创建:索引字段必须是主键,主键索引的字段类型一般都是 int,创建主键索引的关键字是primary key
-- 方式一:create table user1( id int primary key, -- 在创建表的时候,直接在字段名后指定 primary key name varchar(30));-- 方式二:create table user1( id int, name varchar(30), primary key(id) -- 在创建表的最后,指定某列或某几列为主键索引);
create table user3( id int, name varchar(30));alter table user3 add primary key(id); -- 创建表以后再添加主键
普通索引的创建:索引字段的数据允许重复。使用的关键字为 index
create table user( id int primary key, name varchar(20), email varchar(30), index(name) --在表的定义最后,指定某列为索引);
create table user( id int primary key, name varchar(20), email varchar(30));alter table user add index(name); --创建完表以后指定某列为普通索引
唯一索引的创建:要求检索字段不能存在重复数据。使用的关键字为 unique。唯一索引的创建方式和普通索引完全一样,只需要把 index 关键字替换成 unique 关键字即可。
查询某个表中的所有索引以及对应的字段
show index from 表名 [\G];
alter table 表名 drop primary key;
注意:如果该主键已经被设为了自增(auto_increment),则该主键索引无法被删除。
drop index 索引字段名 on 表名;
来源地址:https://blog.csdn.net/challenglistic/article/details/129166717
--结束END--
本文标题: Mysql 索引(三)—— 不同索引的创建方式(主键索引、普通索引、唯一键索引)
本文链接: https://www.lsjlt.com/news/405157.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-09
2024-05-09
2024-05-09
2024-05-09
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0