Mysql 索引

mysql

innodb引擎下常用索引类型是B+树。B+树是一颗N叉树,是一颗矮胖的树,层高一般是1-3层,就能满足千万级别数据的存储,所以只需要经过3次IO,所以这就是B+树查询快的原因。

B+树 分 聚簇索引和普通索引

聚簇索引:一般都是以自增主键作为聚簇索引,聚簇索引的特点,在叶子节点中会保存每行中所有数据。而普通索引在叶子节点是保存的索引字段及主键。

思考:为什么要用自增主键做聚簇索引?

因为:自增主键是有序的,在维护索引的过程中,每次插入一条记录都是追加操作,不涉及挪动其他记录,不触发叶子节点的分裂。

加餐:

在InnoDB存储引擎中,表都是根据主键顺序组织存放的,这种存储方式的表称为索引组织表。

InnoDB逻辑存储结构:表空间—》段——》区——》页

隔离级别:
分为读未提交、读已提交、可重复读、串行化。
mysql默认的隔离级别是可重复读,下面重点讲一下可重复读。事务T启动的时候会创建一个视图read-view,之后事务T执行期间,即使有其他事务修改了数据,事务T看到的仍然跟在启动时看到的一样。可重复读的核心就是一致性读。
一个数据版本,对于一个事务视图来说,除了自己的更新总是可见以外,有三种情况:
1、版本未提交,不可见;
2、版本已提交,但是在视图创建后提交的,不可见;
3、版本已提交,而且是在视图创建前提交的,可见。
而事务更新数据的时候,只能用当前读。如果当前的记录的行锁被其他事务占用的话,就需要进入锁等待。更新数据都是先读后写的,而这个读,只能读当前的值,称为“当前读”。这里,我们提到一个概念,叫做当前读。其实除了update语句外,select语句如果加锁,也是当前读。当前读,总是读取已经提交完成的最新版本。

而读提交的逻辑和可重复读的逻辑类似,他们最主要的区别是:
在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图;
在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值