mysql索引

MySQL索引

简介

官方定义:一种帮助mysql提高查询效率的数据结构

优点

image-20220216105601603

缺点

image-20220216105628811

索引的分类

image-20220216110649945

主键索引

主键索引在建表时自动创建,无需手动创建

查看索引语法

show index from [表名];

普通索引

普通索引创建有两种方式:建表时创建、建表后创建

建表时创建

create table t_user(id varchar(20) primary key,name varchar(20),key(name))

建表后创建

create index [索引名] on [表名]([列名]);

删除索引

drop index [索引名] on [表名];

唯一索引

建表时创建

create table t_user(id varchar(20) primary key,name varchar(20),unique(name));

建表后创建

create unique index [索引名] on [表名]([列名]); 

复合索引

建表时创建

create table t_user(id varchar(20) primary key,name varchar(20), age int,key(name,age));

建表后创建

create index [索引名] on [表名]([列名],[列名]); 

最左前缀原则

  1. 最左前缀原则,
  2. mysql在查询过程中为了更好的利用索引,会自当将搜索语句进行排序,以便符合最左前缀原则

image-20220216140206421

索引底层——B+树

mysql的数据底层使用链表的形式排列,其中一个叶子节点存储了【键值】、【数据】和【指针】,每个指针又指向下一个节点的键值。

PS:这也就决定了MYSQL中进行索引的前提是**【排序】**,这也就造成了索引的缺点,即会影响增删改时的效率。

image-20220216143317546

此时,以默认16kb的大小将数据进行分页,每页的第一条数据抽取出其键值和指针,组成页目录。页目录的基础上还可以再抽取出上一层的页目录,一个三层的B+树大概可以维护10亿条数据

image-20220216144114417

B+树相比于B树的不同点

  • B树的非叶子节点只存储键值信息
  • 所有叶子节点之间都有一个链指针
  • 数据记录都存放于叶子节点中

**PS:**这也就是为什么在MYSQL中建议使用自增列做主键,使用自增列(INT/BIGINT)做主键,这时候写入顺序是自增的,和B+树叶子节点分裂顺序一致。

聚簇索引与非聚簇索引

  • 聚簇索引:将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据
  • 非聚簇索引:将数据与索引分开存储,索引结构的叶子节点指向了数据对应的位置

InnoDB引擎

image-20220216150445000

非聚簇索引:

  • 第一步在非聚簇索引B+树中检索对应值,获取其主键
  • 第二步在聚簇索引B+树中检索其主键,获得最后的数据值

问:为什么非聚簇索引不直接存储数据地址?

因为当我们对数据进行修改时,也需要对索引进行相应的变动,我们只针对聚簇索引做变动,因此宁愿进行二次查找,也不会在非聚簇索引存储数据地址

image-20220216175158723

image-20220216174632680

MYISAM引擎

image-20220216175344850

image-20220216175133608

详细分析:https://www.jianshu.com/p/fa8192853184

[外链图片转存中…(img-qmwu4T0D-1647242684683)]

[外链图片转存中…(img-vixJ4i5L-1647242684683)]

详细分析:https://www.jianshu.com/p/fa8192853184

本科计算机bi-ye-she-ji辅导,远程安装运行+部署,欢迎各位小伙伴打扰~企鹅号:298-150-5753

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值