
MySQL调优专栏
文章平均质量分 93
深入底层讲解MySQL优化的原理
菩提老师
10年+在职Java资深工程师,熟悉前端,精通后端Java,专注于分享和传授实际工作中用的技术经验、技术解决方案,有Java从零到高薪的就业全套视频课程,代码案例,各种实际项目,感谢关注我,联系我获取代码解决方案。
展开
-
07-深入理解MVCC与BufferPool缓存机制
在可重复读隔离级别,当事务开启,执行任何查询sql时会生成当前事务的一致性视图read-view,该视图在事务结束之前都不会变化(如果是读已提交隔离级别在每次执行查询sql时都会重新生成),这个视图由执行查询时所有未提交事务id数组(数组里最小的id为min_id)和已创建的最大事务id(max_id)组成,事务里的任何sql查询结果需要从对应版本链里的最新数据开始逐条跟read-view做比对从而得到最终的快照结果。因为磁盘随机读写的性能是非常差的,所以直接更新磁盘文件是不能让数据库抗住很高并发的。原创 2025-03-04 09:45:46 · 408 阅读 · 0 评论 -
06-深入理解Mysql事务隔离级别与锁机制
接着执行update account set balance = balance - 50 where id = 1,balance没有变成400-50=350,lilei的balance值用的是步骤2中的350来算的,所以是300,数据的一致性倒是没有被破坏。(2)打开一个客户端B,并设置当前事务模式为serializable,更新相同的id为1的记录会被阻塞等待,更新id为2的记录可以成功,说明在串行模式下innodb的查询也会被加上行锁。间隙锁,锁的就是两个值之间的空隙。原创 2025-03-03 13:44:21 · 866 阅读 · 0 评论 -
05-Mysql索引优化实战二
这里表示user表的id字段的类型是TINYINT,可以存储的最大数值是255。字段有索引:count(*)≈count(1)>count(字段)>count(主键 id) //字段有索引,count(字段)统计走二级索引,二级索引存储数据比主键索引少,所以count(字段)>count(主键 id)当使用left join时,左表是驱动表,右表是被驱动表,当使用right join时,右表时驱动表,左表是被驱动表,当使用join时,mysql会选择数据量比较小的表作为驱动表,大表作为被驱动表。原创 2025-03-03 13:42:11 · 1033 阅读 · 0 评论 -
02-Mysql索引优化实战(1)
以社交场景APP来举例,我们一般会去搜索一些好友,这里面就涉及到对用户信息的筛选,这里肯定就是对用户user表搜索了,这个表一般来说数据量会比较大,我们先不考虑分库分表的情况,比如,我们一般会筛选地区(省市),性别,年龄,身高,爱好之类的,有的APP可能用户还有评分,比如用户的受欢迎程度评分,我们可能还会根据评分来排序等等。一般来说,通过这么一个多字段的索引是能够过滤掉绝大部分数据的,就保留小部分数据下来基于磁盘文件进行order by语句的排序,最后基于limit进行分页,那么一般性能还是比较高的。原创 2025-03-01 16:26:39 · 1149 阅读 · 0 评论 -
01-一条SQL在MySQL中是如何执行的
开始执行的时候,要先判断一下你对这个表 T 有没有执行查询的权限,如果没有,就会返回没有权限的错误,如下所示 (在工程实现上,如果命中查询缓存,会在查询缓存返回结果的时候,做权限验证。主要包括连接器、查询缓存、分析器、优化器、执行器等,涵盖 MySQL 的大多数核心服务功能,以及所有的内置函数(如日期、时间、数学和加密函数等),所有跨存储引擎的功能都在这一层实现,比如存储过程、触发器、视图等。你可以看到,如果查询命中缓存,MySQL 不需要执行后面的复杂操作,就可以直接返回结果,这个效率会很高。原创 2025-03-01 16:22:47 · 923 阅读 · 0 评论