mysql索引

在这里插入图片描述

什么是索引

索引(index),是一种增加筛选(select)速度的方法,在数据库中,查询语句的使用频率很高,所以我们需要增加筛选的速度。
同时,索引是一种数据结构,在mysql中,Innodb使用的索引结构是B+树。

索引的原理

数据库运行在应用层,同时在其中存在这一个缓冲区,数据库Innodb引擎以16kb作为库的基本单位,叫做page。
page结构如下,这是Innodb中底层的结点结构。
在这里插入图片描述

索引建立的底层,在Innodb中,为了加快底层的搜索,我们需要建立目录,同时为了加快目录的搜索,我们也可以对目录加目录,从而形成一棵B+树。
在这里插入图片描述

上述为聚簇索引的树结构,聚簇索引就是将内容和索引放在同一个结点中。
Innodb的主键表使用的是聚簇索引,其他索引使用的是辅助索引/非聚簇索引,及结点不存储内容,只存储索引和主键索引的映射,要查询到某个索引,只需要通过映射回到主键索引中查询,这叫做回表查询。


myisam采用的是非聚簇索引,及叶子结点存储的是索引和该索引所对应的物理磁盘地址,这是因为myisam的数据和索引是分离的,而innodb的数据和索引是在同一个文件内。
其他索引的叶子结点存储的也是索引文件。
在这里插入图片描述
综上,myisam相对简单,不需要回标查询,效率要稍高innodb一筹。

索引的类型

查看一个表的索引。

show index from t_name;

我们可以看到,表中有主键索引,有唯一键索引,同时每个索引都有一个keyname,代表索引的名字。
每一个索引都会生成一颗B+树,只有主键索引会以聚簇索引的形式展现,其他索引则是辅助索引。

主键索引

主键索引需要创建主键。

alter table t_name add primary key(c1, c2 …)。

同时如果表内没有被创建主键,则表中默认会存在一个主键。 以这个默认的主键为索引建立B+树,方便搜索,所以这就是为什么我们插入有主键的表时,会默认按照主键排序
在这里插入图片描述

删除主键索引就是直接删除主键。

alter table t_name drop primary key

在这里插入图片描述

唯一键索引

唯一键索引需要创建唯一键。

alter table t_name add unique key(c1)。

创建唯一键索引后,使用辅助索引
删除索引可以使用删除索引的指令。

alter table t_name drop index keyname

或者删除唯一键。

alter table t_name drop unique key(c1)

普通索引

普通索引和唯一键索引和主键索引不同,设置为普通索引的列可以重复。
创建普通索引。

alter table t_name add index(c1, c2)。

如果一个索引以两个key作为索引,则他们是一个索引,只会生成一颗B+树。
在这里插入图片描述
删除索引可以使用删除索引的指令。

alter table t_name drop index keyname

在这里插入图片描述

创建索引的条件

我们创建索引的目的是为了加快搜索,索引我们可以给以下条件的列增加索引。

1).唯一性好的。
2).平凡被查询的。
3).经常被作为where字句的判断条件的。

满足以上三点的建议被设置为索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值