MySql —— 死锁场景
摘要:参考: 小林coding: https://xiaolincoding.com/mysql/lock/deadlock.html 出世&入世:https://blog.csdn.net/weixin_54828627/article/details/129379140 死锁的四个必要条件: 互斥 占
阅读全文
MySql —— Buffer Pool
摘要:有了缓冲池后: 当读取数据时,如果数据存在于 Buffer Pool 中,客户端就会直接读取 Buffer Pool 中的数据,否则再去磁盘中读取。 当修改数据时,首先是修改 Buffer Pool 中数据所在的页,然后将其页设置为脏页,最后由后台线程将脏页写入到磁盘。 Buffer Pool 有多
阅读全文
MySql —— 可重复读完全解决了幻读问题吗
摘要:参考: 小林coding: https://xiaolincoding.com/mysql/transaction/phantom.html#%E4%BB%80%E4%B9%88%E6%98%AF%E5%B9%BB%E8%AF%BB 当同一个查询在不同的时间产生不同的结果集时,事务中就会出现所谓的幻
阅读全文
MySQL —— 为什么单表不要超过 2000w
摘要:InnoDB 采用 B+ 树存储,真正的数据行存在聚簇索引的叶子节点上 B+ 树的每个节点是一页,一页固定大小是 16k ,其中 1k 是页头,15k 是可以存放 索引/数据行 的空间 B+ 树的层数要尽可能小,以减少查找数据时磁盘 IO 的次数(磁盘 IO 很慢),实际中一般是 3 层 下面假设
阅读全文
MySQL —— 数据页与 B+ 树索引
摘要:数据页包括七个部分 在 File Header 中有两个指针,分别指向上一个数据页和下一个数据页,连接起来的页相当于一个双向的链表,如下图所示: 采用链表的结构是让数据页之间不需要是物理上的连续的,而是逻辑上的 连续。 数据页的组成: 将所有的记录 划分成几个组,这些记录包括最小记录和最大记录,但不
阅读全文
MySQL —— 索引
摘要:参考 小林 coding : https://xiaolincoding.com/mysql/index/index_interview.html#%E4%BB%80%E4%B9%88%E6%98%AF%E7%B4%A2%E5%BC%95 可以按照四个角度来分类索引。 按「数据结构」分类:B+tre
阅读全文
MySQL —— 基础
摘要:MySQL 一行记录是怎么存储的? 我们每创建一个 database(数据库) 都会在 /var/lib/mysql/ 目录里面创建一个以 database 为名的目录,然后保存表结构和表数据的文件都会存放在这个目录里。 比如,我这里有一个名为 my_test 的 database,该 databa
阅读全文
MySQL —— 锁的粒度和类型、next-key lock
摘要:参考 https://xiaolincoding.com/mysql/lock/mysql_lock.html 全局锁(备份数据库) 加全局锁 flush tables with read lock 释放全局锁 unlock tables 执行后,整个数据库就处于只读状态了,这时其他线程执行以下操作
阅读全文
MySQL —— 事务的隔离级别、MVCC
摘要:《凤凰架构》一书中对事务的隔离级别以及事务的定义很清晰 https://www.cnblogs.com/suBlog/p/16592859.html 总结 写锁:X 排他锁,其他事务不能写入数据,也不能施加读锁(可读,但是不可加读锁) 读锁:S 共享锁,多个事务可以同时施加读锁,但是其他事务不能写入
阅读全文
MySQL —— 日志系统 redoLog、undoLog、binLog
摘要:参考: 小林Coding:https://xiaolincoding.com/mysql/log/how_update.html ApsaraDB : https://www.alibabacloud.com/blog/an-in-depth-analysis-of-undo-logs-in-inn
阅读全文
MySQL
摘要:1、回表查询与索引覆盖 聚簇索引:主键索引一般是聚簇索引。聚簇索引的非叶子结点记录的是索引,叶子结点记录了对应的数据行(所有的字段)。 非聚簇索引:叶子结点记录的是普通索引列与主键的对应关系(不记录别的字段)。 如果走了普通索引,但想要 select 走的索引之外的字段,那么在根据非聚簇查完之后,就
阅读全文