第5章 索引与算法,第6章 锁

本文详细介绍了MySQL中InnoDB存储引擎的索引类型,包括B+树索引、全文索引和哈希索引,重点讲解了聚集索引和辅助索引的工作原理。此外,还深入探讨了锁的概念,包括行级锁、锁的类型和解决并发问题的策略,如脏读、不可重复读和丢失更新现象,以及死锁的避免和处理方法。
摘要由CSDN通过智能技术生成

第5章 索引与算法

5.1 InnoDB存储引擎索引概述

索引类型:
• B+树索引
• 全文索引
• 哈希索引
B+树索引时最为常用和最为有效的索引,
B+树索引并不能查找一个给定键值的具体行
查找流程:
查找数据所在的页->将页读入内存->在内存中查找数据
B+树的层数一般是2-4层,查找键值只要2-4次IO操作,查询时间只需0.02~0.04秒

5.4.1 聚集索引

聚集索引(clustered index) 就是按照每张表的主键构造一棵B+树, 同时叶子节点中存放的即为整张表的行记录数据, 也将聚集索引的叶子节点称为数据页
聚集索引的存储并不是物理上连续的, 而是逻辑上连续的

5.4.2 辅助索引

5.7.2 InnoDB存储引擎中的哈希算法

冲突机制:采用链表方式
哈希函数:除法散列
h(k)=k mod m
m的取值为略大于2倍的缓冲池页数量的质数


第6章 锁

数据库系统区别于文件系统的一个关键特性

6.1 什么是锁

用途:对共享资源的并发访问,提供数据的完整性和一致性
在行级别上对表数据上锁

6.2 lock与latch

Latch 闩锁,轻量级的锁 锁定时间非常短 操作对象是线程
Lock 操作对象是事务
这里写图片描述

屏幕剪辑的捕获时间: 2017/8/24 16:46

6.3 InnoDB存储引擎中的锁

6.3.1 锁的类型

• 共享锁[S Lock]:允许事务读一行数据   
• 排它锁 [X Lock]:允许事务删除或更新一行数据

多粒度锁:允许事务在行级上的锁和表级上的锁同时存在
两种意向锁:
1) 意向共享锁(IS Lock) , 事务想要获得一张表中某几行的共享锁
2) 意向排他锁(IX Lock) , 事务想要获得一张表中某几行的排他锁

6.3.2 一致性非锁定读

6.3.4 自增长与锁

6.5 锁问题

锁会带来三种问题:脏读,不可重复读,丢失更新

6.5.1 脏读

重要概念区分
脏页:在缓冲池中已经修改的页,但是还未刷新到磁盘中。不影响数据的一致性,提高性能
脏数据:事务对缓冲池中行记录的修改,还没有被提交commit。
读到脏数据,即一个事务可以读到另外一个事务中未提交的数据。违反事务的隔离性

6.5.2 不可重复读

不可重复读:在同一个事务中读取同一条记录多次次,得到的结果不一致,由于在2次读取之间另外一个事务对此行数据进行了修改。
违反一致性
不可重复读的问题定义为Phantom Problem
InnoDB存储引擎的默认事务隔离级别是READ REPEATABLE, 采用Next-Key Lock算法, 避免了不可重复读的现象

6.5.3 丢失更新

一个事务的更新操作会被另一个事务的更新操作所覆盖, 从而导致数据的不一致。
解决办法:串行化操作,加X锁

6.6 阻塞

一个事务中的锁等待另一个事务的锁释放它所占的资源

6.7 死锁

死锁是指两个或两个以上的事务在执行过程中, 因争夺锁资源而造成的一种互相等待的现象
解决办法:等待转换为回滚,并且事务重新开始
最简单的一种方法:超时—-超过时间阈值回滚,另一个事务执行。
普遍的方式:等待图wait-for graph 【InnoDB存储采用 】
要求保存两种信息:锁的信息链表,事务等待链表。
死锁后回滚undo量最小的事务。
死锁只存在于并发的情况。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值