Mysql索引

问题

1.InnoDB和MyISAM的区别?

InnoDB:事务优先(适合高并发;行锁;)
MyISAM:性能优先(表锁;)

2.索引为什么不用二叉树,红黑树,B树?

二叉树:树倾斜问题。
红黑树:树的深度太高。
B树:非叶子节点既存储索引数据,也存储需要查找的数据,相同的磁盘块存储的查找数据越多,则存储的索引数据越少,效率就越低。

3.索引分类有哪些?

普通索引。唯一索引。复合索引。全文索引。主键索引。

4.explain用法。

select_type:查询类型。
table:表。
type:类型。
possible_keys:预测用到的索引。
key:实际使用的索引。
key_len:实际使用索引长度。
ref:表之间的引用。
rows:通过索引查询到的数据量。
Extra:额外的信息。

5.Mysql事务问题

5.1 隔离级别

原子性:执行要么全部成功,要么全部失败。
一致性:事务开始和完成,数据必须保持一致。
隔离性:事务之间是相互独立的。
持久性:数据的修改是永久的。

5.2 并大情况下事务引发的问题

脏读:A事务还未提交,B事务读到A的结果。
不可重复读:A事务在本次事务中,对自己未操作的数据,进行多次读取,结果不一致。(upadte,delete)
幻读:A事务在本次事务中,对自己未操作的数据,进行多次读取,第一次记录不存在,第二次记录出现了。(insert)

5.3 解决事务问题(制定标准)

读未提交(ru):只能保持持久性。无法解决,脏读,不可重复读,幻读。
读已提交(rc):语句级别。无法解决,不可重复读,幻读。行级共享锁,读完立刻释放。
可重复读(rr):事务级别。无法解决幻读。通过行级共享锁,并事务结束时释放来解决不可重复读问题
串行化(serializable):最高级别,事务与事务完全串行化执行,毫无并发可言,性能极地。

5.4 MVCC多版本并发控制

MVCC机制:生成一个数据快照,并用这个快照来提供一定级别的一致性读取。

MVCC中的udolog和readview作用:
undlog:会生成事务版本信息,每个版本都会有唯一的事务id和相应的数据。不同的版本之前通过版本链关联,当某个版本没有任何地方引用时,会将该版本删除。
readview:多个事务id的集合,最大事务的版本id,以及当前版本的事务id。

MVCC,不可重复读,幻读问题?
在这里插入图片描述
为什么RC无法解决不可重复读问题?
每次执行快照读的时候,都会生成一个新的readview。

为什么RR无法解决幻读问题?
虽然RR读会复用readview,但是有当前读时会生成一个新的readview.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值