File tree Expand file tree Collapse file tree 1 file changed +17
-2
lines changed
Expand file tree Collapse file tree 1 file changed +17
-2
lines changed Original file line number Diff line number Diff line change @@ -67,19 +67,34 @@ select * from table_name inner join ( select id from table_name where (user = xx
67673 . 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行,然后你可以扯到隔离级别;
68684 . 持久性(Durability):一个事务一旦提交,对数据库的修改应该永久保存。
6969
70+ 不同事务隔离级别的问题:
7071[ https://www.jianshu.com/p/4e3edbedb9a8 ] ( https://www.jianshu.com/p/4e3edbedb9a8 )
7172
7273## 锁表、锁行
74+ 1 . InnoDB 支持表锁和行锁,使用索引作为检索条件修改数据时采用行锁,否则采用表锁
75+ 2 . InnoDB 自动给修改操作加锁,给查询操作不自动加锁
76+ 3 . 行锁相对于表锁来说,优势在于高并发场景下表现更突出,毕竟锁的粒度小
77+ 4 . 当表的大部分数据需要被修改,或者是多表复杂关联查询时,建议使用表锁优于行锁
78+
7379[ https://segmentfault.com/a/1190000012773157 ] ( https://segmentfault.com/a/1190000012773157 )
7480
7581### 悲观锁乐观锁、如何写对应的SQL
82+ 悲观锁:select for update
83+ 乐观锁:先查询一次数据,然后使用查询出来的数据+1进行更新数据,如果失败则循环
84+
7685[ https://www.jianshu.com/p/f5ff017db62a ] ( https://www.jianshu.com/p/f5ff017db62a )
7786
7887### 索引
7988#### 原理
80- 我们拿出一本新华字典,它的目录实际上就是一种索引:非聚集索引。我们可以通过目录迅速定位我们要查的字。而字典的内容部分一般都是按照拼音排序的,这实际上又是一种索引:聚集索引。聚集索引这种实现方式使得按主键的搜索十分高效,但是辅助索引搜索需要检索两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。
89+ 聚集索引:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引
90+ 非聚集索引:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引
91+
92+ #### 索引原理
93+ 使用B+树来构建索引,为什么不用二叉树?因为红黑树在磁盘上的查询性能远不如B+树
94+
95+ 红黑树最多只有两个子节点,所以高度会非常高,导致遍历查询的次数会多,又因为红黑树在数组中存储的方式,导致逻辑上很近的父节点与子节点可能在物理上很远,导致无法使用磁盘预读的局部性原理,需要很多次IO才能找到磁盘上的数据
8196
82- 使用B+树来构建索引,为什么不用二叉树?红黑树在磁盘上的查询性能远不如B+树。原因是红黑树最多只有两个子节点,所以高度会非常高,导致遍历查询的次数会多,又因为红黑树在数组中存储的方式,导致逻辑上很近的父节点与子节点可能在物理上很远,导致无法使用磁盘预读的局部性原理,需要很多次IO才能找到磁盘上的数据; 但B+树一个节点中可以存储很多个索引的key,且将大小设置为一个页,一次磁盘IO就能读取很多个key,且叶子节点之间还加上了下个叶子节点的指针,遍历索引也会很快。
97+ 但B+树一个节点中可以存储很多个索引的key,且将大小设置为一个页,一次磁盘IO就能读取很多个key,且叶子节点之间还加上了下个叶子节点的指针,遍历索引也会很快。
8398
8499B+树的高度如何计算?在Linux里,每个页默认4KB,假设索引的是8B的long型数据,每个key后有个页号4B,还有6B的其他数据(参考《MySQL技术内幕:InnoDB存储引擎》P193的页面数据),那么每个页的扇出系数为4KB/(8B+4B+6B)=227,即每个页可以索引245个key。在高度h=3时,s=227^3=1100万。通常来说,索引树的高度在2~ 4。
85100
You can’t perform that action at this time.
0 commit comments