
mysql
文章平均质量分 91
倒悬于世
任何技术都只是生产工具而已。
个人工具类网站:https://tool.ilove1999.com/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
mysql死锁的场景分析
col_1和col_2为联合索引,遵循最左原则col_1会走索引,但col_2会对整个索引进行扫描,此时会对整个索引加锁。① 锁住zone_id=2对应的间隙锁: zoneId in (1,2)② 锁住索引zone_id=1对应的主键索引行锁id = [1,2]② 锁住索引zone_id=2对应的主键索引行锁id = [3,4]④ 锁住uid=1对应的主键索引行锁: id = [1, 3]④ 锁住uid=2对应的主键索引行锁: id = [2, 4]场景复现操作(几率不高)原创 2024-07-17 17:54:41 · 940 阅读 · 0 评论 -
redo log和事务的两次提交
当mysql进行写操作时,会优先把数据再去写change buffer,(更新的话,change buffer没有此数据时,会去硬盘里面查出来放到change buffer中,再修改),再写入redo log buffer中。然后在进行的时候,redo log buffer中的数据才会写入redo log日志文件里。注:redo的是记录由“表空间号+数据页号+偏移量+修改数据长度+具体修改的数据”组成。原创 2024-07-04 13:54:35 · 706 阅读 · 0 评论 -
undo log 日志详解
当事务提交的时候,innodb不会立即删除undo log,因为后续还可能会用到undo log,如隔离级别为repeatable read时,事务读取的都是开启事务时的最新提交行版本,只要该事务不结束,该行版本就不能删除,即undo log不能删除。如果被访问版本的trx_id,大于或等于readview中的max_trx_id值,表明生成该版本的事务在当前事务生成readview后才开启,此时该版本不可以被当前事务访问,需要通过隐藏的回滚指针从undo log中读取历史版本;原创 2024-07-04 10:47:52 · 1639 阅读 · 0 评论 -
联合索引遇到范围查询(>、<、between、like)的情况
于是,在确定需要扫描的二级索引的范围时,当二级索引记录的 a 字段值为 1 时,可以通过 b = 2 条件减少需要扫描的二级索引记录范围(b 字段可以利用联合索引进行索引查询的意思)。由于联合索引(二级索引)是先按照 name 字段的值排序的,所以前缀为 ‘j’ 的 name 字段的二级索引记录都是相邻的, 于是在进行索引扫描的时候,可以定位到符合前缀为 ‘j’ 的 name 字段的第一条记录,然后沿着记录所在的链表向后扫描,直到某条记录的 name 前缀不为 ‘j’ 为止。注意, j 是闭区间。原创 2023-11-27 23:16:29 · 5441 阅读 · 12 评论 -
Mysql结构及过程
当使用带有事务的存储引擎时(例如innodb),所有未提交事务的二进制日志记录会被记录到一个缓存中,提交事务后,直接将缓存中的日志写入二进制日志文件,此缓存默认32k.是基于会话(session)实现的,也就是说当一个线程开启一个事务,mysql会自动分配一个缓存,该值设置要小心,不能过大。咱们先从一个例子开始。同样的,如果有请求来修改数据,MySQL并不会直接去修改磁盘,而是会修改已经在缓冲池的页中的数据,然后再将数据刷回磁盘,这就是缓冲池的作用,加速读,加速写,减少与磁盘的IO交互。原创 2023-11-27 12:37:27 · 245 阅读 · 0 评论 -
Explain详情
只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引,一般就是在你的where语句中出现between、< 、>、in等的查询,这种范围扫描索引比全表扫描要好,因为它只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引。:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体。:显示可能应用在这张表中的索引,一个或多个。实际使用的索引,如果为NULL,则没有使用索引。原创 2023-11-26 23:10:06 · 119 阅读 · 0 评论 -
mysql 死锁分析
二、 死锁产生的四个必要条件下列方法有助于最大限度地降低死锁:虽然不能完全避免死锁,但可以使死锁的数量减至最少。将死锁减至最少可以增加事务的吞吐量并减少系统开销,因为只有很少的事务回滚,而回滚会取消事务执行的所有工作。由于死锁时回滚而由应用程序重新提交。(1)按同一顺序访问对象。如果所有并发事务按同一顺序访问对象,则发生死锁的可能性会降低。例如,如果两个并发事务获得 Supplier 表上的锁,然后获得 Part 表上的锁,则在其中一个事务完成之前,另一个事务被阻塞在 Supplier 表上。第一原创 2022-07-10 14:36:06 · 10785 阅读 · 0 评论