我知识架构中mysql

一. 数据执行流程

二 索引原理

说一下innoDB的索引,B+树结构+

innoDB支持事物(ACID),支持行级锁。存储表结构的文件叫.frm,存储数据和索引的文件叫.idb.类似这种数据和索引在一块的就叫聚簇索引。而《数据库原理》种是这么定义的,聚簇索引的叶子结点存的数据块,非聚簇索引叶子结点存的是索引,指向数据块,如图

 

 

覆盖索引:创建的索引包含查询的索引。比方说一个表(table)中包含字段a(加索引),b(加索引),c(不加索引),select a,b from table 就用到了覆盖索引,select * from table就没有用到覆盖索引。

最左前缀原则:就是加了一个(a,b)的联合索引,select * from table where a=a 就用到了最左前缀原则,select * from table where b=b就没有用到

索引下推:减少回表次数,io次数。先过滤,然后返回数据。比方说 select * from table where a like 'a%' and  age=10,不开启ICP时,先将a字段以a开头的全部数据返回,然后再根据条件过滤;开启之后,先一行一行的找,如果符合a字段以a开头的条件则会继续判断其余条件例如是否age=10,然后返回。对于innoDB只适用于辅助(二级)索引

辅助索引,回表

myisam不支持事物,但是速度快,只支持表级锁。存储表结构的文件叫.frm,存储数据.MYD,索引的文件叫.MYI

一般用在读写分离的时候,myisam作为从库用来读,innoDB用作主库,用来写

三 事务与锁机制

锁其实锁的就是索引,创建的时候如果创建了索引就用那个索引,如果没有的话就找一个唯一不重复作为索引,如果没有的话就自己维护一个索引。

事务并发问题

1.脏读                            a读到了b回滚的数据

2.不可重复读                 a读到了b更新的数据

3.幻读                            a读到了b增加或者删除的数据

如何解决如上问题呢

事务隔离级别

1. 读未提交           1,2,3无法解决

2.读已提交             能解决脏读 ;基于MVCC

3.可重复读             能解决脏读,不可重读复读,无法解决幻读;但是innoDB都是可以解决的;基于MVCC;innoDB的默认

4.串行化                 都能解决

MVCC:基于快照方式实现。

LBCC:给数据加锁方式实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值