索引,事务原理

索引 :帮助mysql高效获取数据的排好序的数据结构 create index 索引名 no 表名(值)

不索引会有大量的磁盘IO,一张表只能有一个索引

索引的数据结构 :二叉树,红黑树(二插平衡树,层数太多),hash表,B-tree(横向扩展存储元素)
mysql底层是b+树 ( 和B树区别 把非叶子结点的data都放在了叶子结点 使用叶子结点有整张表的索引元素 叶子结点间使用指针连接)
!在这里插入图片描述

存储索引计算 一 bigint为例(16kb/(8+6)b) = 1170

索引流程(首先判断是不是索引,然后这个值放到B+树中查找,读到数据的叶子结点的指针,然后根据这个指针找到数据)

后缀
.frm :存储表结构 myisam
.myd:mysql data 数据
.myi:nysql index 索引

.idb 数据和索引一起 innod

在这里插入图片描述
在这里插入图片描述
Innod 叶子结点存储的是所有的 行的信息

如果索引自己没有加主键,mysql会找一列没有重复的或者自己加一列没有重复的数据做主键。
使用自增整型 做主键,节省空间 ,增加值时防止树分裂再平衡(B+树底层就是自增的)

联合索引原理:b+

事务

事务:数据库管理系统执行过程中的一个逻辑单位(不可再分割)由一个有限的数据库操作序列构成(多个DML语句,Select语句不包括事务)
start transaction
要执行的sql语句
commit

ACID特性原理

原子性 (日志回滚 undo log mysql会做一个相反的操作)

一致性 最终状态

隔离性
写写操作:锁
写读操作:Mvcc
begin
select * —执行第一个sql语句快照读(以后就读这个快照的数据)
快照只需要记录最大的数据版本号便可生成
up_limit_id = 已提交事务ID的最大值
修改数据时会有当前读 !!!
在这里插入图片描述
20 18

Innodb
开启一个事务时每一个事务都有事务ID(顺序递增) transaction_id 向事务管理系统申请

每一行数据有多个版本
update --生成一个新的数据版本, 版本号(transaction_id) row trx_id = transaction_id (哪一行数据被修改,修改了什么)
rollback 旧数据保留且新数据要和旧数据有映射关系

脏读:读取了其他事务没有提交的数据 (并发问题)
不可重复读:读取了其他并发事务提交的数据,针对updatr 的delete
幻读,读取了其他并发事务提交的数据,针对insert
read uncommitted
read committed 读以提交
repeatable read 可重复读
serializable read 读写串行话

持久性 (redo log innd存读数据和sync.map 实现原理差不多,有一个buffer缓存,完了解决数据丢失,先把操作写到redo log,在更新到buffer redo log写入数据是尾部追加的,而buffer是随机地址写入的,redo log没有同步到磁盘之前存储在缓存区中 0 不提交到到磁盘靠主线程每秒刷新, 1 同步保证,2 异步不保证)

myisam 表锁
Innodb 行锁
锁定粒度 >
加锁效率 >
冲突概率 >
并发性能 <

共享锁又名读锁 其他人可以读但不能写
select *from table lock in share mode Commit/Rollback
排他锁:自身可以修改,其他人无法修改
意向表锁,在加共享、排他锁时自动加的 查看有没有已经锁定的数据
记录锁 行
Select * from user_key_idx where id = 1 for update
间隙锁(以数据库里的记录进行划分的)例:(1,5】
select * from user_key _idx WHERE id > 5 and id <o for update; 锁(5,9)只在RR

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值