![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
InnoDB
文章平均质量分 50
TasIsMe
这个作者很懒,什么都没留下…
展开
-
1.InnoDB的关键特性
如果问起对InnoDB的了解有多少,你可能会回答InnoDB的四个关键特性,存储结构,索引,锁,事务等五个方面取描述InnoDB。 InnoDB的四个关键除了二次写是为了防止数据被破坏,其他的三个特性几乎都是为了提高性能考虑的。 1.两次写 在理解两次写之前,先要理解什么是脏页? 页是InnoDB存储结构的单位,行数据和索引都会存放在页中。但是更新数据时,InnoDB并不是直接更新磁盘中的数据的,...原创 2019-07-24 17:03:28 · 326 阅读 · 0 评论 -
2.InnoDB的存储结构
上一篇文章介绍了InnoDB的四大特性,这篇文章介绍下InnoDB的存储结构。 一 物理文件 首先,先打开mysql的数据存储路径,可以使用命令查看具体的路径。 如果是使用Navicat Premiun,可以直接按下F6打开命令界面。 show global variables like "%datadir%"; 表空间文件 ibd 可以看到里面有一些文件,其中以ibd为后缀的文件,就是存放数据...原创 2019-07-24 19:14:41 · 181 阅读 · 0 评论 -
3.InnoDB的索引和算法
索引是数据库中非常重要的元素,用得好可以极大的提升查询效率,用不好却可能导致更新插入时,发生很多次IO,导致效率低下。 索引中的算法 索引属于算法中经典的检索数据问题。当讨论索引的算法时,也许都会想起B+树,但是除了B+树,实际上还用到了二分查找和哈希算法。 二分查找 为什么要使用二分查找,一个关键的原因是,索引并没有找到数据在哪一行,而是找到数据所在的页,并把数据加载到内存查找。由于页内的数据是...原创 2019-07-25 01:36:16 · 203 阅读 · 0 评论 -
4.InnoDB的锁总结
InnoDB的一个特点就是实现了行锁,锁虽然大部分是InnoDB自动操作的,似乎不需要用户进行干涉,但是如果对锁不了解,可能会导致很多问题。 锁的类型 排他锁(X)和共享锁(S) 所谓排他锁,顾名思义,就是只能独占的锁,比如写数据的时候,一般是排他锁。毕竟,不能一边写数据,一边读数据。 而共享锁一般是读数据用。共享锁的作用是和排他锁互斥,防止读数据的时候,数据被修改。 表锁和行锁 和MyISA...原创 2019-07-25 18:30:35 · 121 阅读 · 0 评论 -
5. InnoDB的事务
InnoDB的一个特性是支持事务,并且实现支持了四种隔离级别。 1.事务的目标:ACID 原子性 原子性是指事务是不可分割的单位,如果其中一步失败了,前面执行成功的也要回滚。 隔离性 隔离性是指,事务提交之前,变更的数据对其他事务不影响。 一致性 一致性是指事务将数据的状态由上一个状态转换为下一个正确的状态。一致性容易和原子性混淆,即使实现了原子性也不一定能保证一致性,比如更新覆盖。 持久性 持...原创 2019-07-26 18:59:26 · 149 阅读 · 0 评论 -
InnoDB一棵B+树只能存放两千万行数据??
今天看到一篇公众号,提了个直击灵魂的问题:InnoDB一棵B+树可以存放多少行数据? 看到他直接给的答案,突然一脸懵逼。约2千万??? 那那些超过2千万的表是怎么存储的? 我们知道InnoDB是以B+树索引的方式存储的。所以如果B+树只能存放2千万左右的数据,那么一张表也只能存放两千万的数据。显然这是错误的。那么作者是如何得出的这个错误的结论? 作者说B+树的深度是2~3层,所以假设B+树有三层...原创 2019-08-22 14:47:44 · 2234 阅读 · 0 评论