mysql的原理图解_MySQL的索引原理(图解)

数据库的索引原理

0.什么是索引

​索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度,但是会降低写入速度。

show index from table_name; 查看索引

create index 索引名字 on 表(字段); 创建辅助索引

drop index 索引名字 on 表(字段); 删除索引

1.索引类型

1.0.全文索引(FULLTEXT)

MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;

1.1普通索引

辅助索引

1.2. 唯一索引

与普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值(注意和主键不同)。如果是组合索引,则列值的组合必须唯一,创建方法和普通索引类似。

1.3. 主键索引

聚集索引

1.4. 单列索引、多列索引

多个单列索引与单个多列索引的查询效果不同,因为执行查询时,MySQL只能使用一个索引,会从多个索引中选择一个限制最为严格的索引。

1.5. 组合索引(最左前缀)

联合索引

2.数据库索引原理

B树结构(blance tree) 根--节点--分支--叶

801fe6913dde0568d83dc773740ef37e.png

B+树

#b+树 在b树的基础上进行了改良 -

-1. 分支节点和根节点都不再存储实际的数据了,让分支和根节点能存储更多的索引的信息,就降低了树的高度,

所有的实际数据都存储在叶子节点中

-2. 在叶子节点之间加入了双向的链式结构(双向链表)方便在查询中的范围条件

-3. mysql中,所有的b+树索引的高度基本控制在3层

5b2e5c27572f232348eb932148e98964.png

第一层存 1-10000的地址,10001-20000的地址,20001-30001的地址。。

第二层存 1-1000,1001-2000...90001-100001地址。。

第三层存 1,msg,jjj; 2,msg,kkkk;...并且第三层是一个双向链表,大大缩减了查询次数

b+树的高度会影响索引的效率,树的高度影响因素

1.选择尽量短的列做索引;每一个节点的存储的信息越多,树的高度也就越低,效率也就越快;

2.对区分度高的列做索引,重复率超过10%不适合;

聚集索引

在innodb中,聚集索引和辅助索引并存,在myisam中,只有辅助索引; 聚集索引:数据直接存储在树结构的叶子

主键创建的索引是聚集索引 其他键创建的索引都是辅助索引

e83569041d65c69fa62994feac929185.png

辅助索引

数据不存在树中

叶子节点中存的主键,再通过一次或者多次查到数据;

4d11ed18c71a5b7cbd7e5faaf1278e14.png

辅助索引和聚集索引的配合使用(回表)

d8fbff7dc595281421280d0a444e197a.png

回表:通过辅助索引查到主键之后,去查聚集索引,就叫回表;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值