MySQL
文章平均质量分 97
深入MySQL底层原理,SQL优化
青天明镜映红尘
青天明镜映红尘,
度世舟上望苦海。
逍遥自在终超脱,
彼岸之中看苍生。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Sharding JDBC 实战
本文介绍了Sharding JDBC的核心概念与实战应用。作为Apache ShardingSphere生态中的核心组件,Sharding JDBC通过封装JDBC接口实现分库分表、读写分离等分布式数据库能力,采用无中心化架构,性能损耗低。文章强调了分库分表的适用前提:单表数据量超过1000万且查询性能下降、数据结构稳定等。实战部分演示了如何通过Spring Boot项目配置Sharding JDBC,包括依赖管理、数据源配置等关键步骤,并解释了逻辑表与物理表的区别。最后提醒分库分表需谨慎,避免因业务变动导原创 2025-12-14 15:22:43 · 991 阅读 · 0 评论 -
MySQL日志梳理(存储引擎层)
本文介绍了InnoDB存储引擎中的重做日志(redo log)和回滚日志(undo log)。redo log是物理日志,用于保证事务的持久性,通过预写日志机制优化磁盘IO性能。它分为内存中的redo log buffer和磁盘上的redo log file,通过write pos和checkpoint指针管理环形日志文件组。undo log是逻辑日志,记录SQL操作的反向操作,用于事务回滚和MVCC机制,存储在undo表空间中。文章详细分析了两种日志的存储结构、写入机制以及在数据库崩溃恢复中的作用,其中r原创 2025-12-07 15:39:22 · 736 阅读 · 0 评论 -
MySQL日志梳理(服务器层)
MySQL日志系统详解:本文梳理了MySQL三大类日志功能与配置方法。服务器层日志包含错误日志(Error Log)、慢查询日志(Slow Query Log)和通用查询日志(General Query Log),分别用于故障排查、SQL性能优化和审计跟踪;存储引擎层日志主要指InnoDB的重做/回滚日志;内部辅助日志包含DDL日志。文章重点介绍了各类日志的开启方式、配置参数及分析方法,特别对主从复制依赖的二进制日志(Binlog)和中继日志(Relay Log)的同步机制进行了说明。通过合理配置这些日志,原创 2025-12-06 17:45:30 · 785 阅读 · 0 评论 -
MySQL集群搭建
本文主要介绍了MySQL集群搭建的必要性及具体步骤。首先阐述了集群部署的三个核心优势:高可用性、性能扩展和存储扩容。然后详细记录了在CentOS 9系统上安装MySQL 8.0的过程,包括安装配置、密码修改和远程访问设置。重点讲解了主从集群的配置方法,包括主节点的二进制日志设置、复制用户创建,以及从节点的同步配置。最后提供了验证集群状态的命令,确保主从复制正常运行。文章特别强调了版本兼容性问题和安全设置注意事项,为MySQL集群部署提供了实用指导。原创 2025-12-06 11:28:55 · 858 阅读 · 0 评论 -
MySQL多版本并发(MVCC)机制
MVCC是为了解决多个事务并发执行时可能出现的数据一致性和冲突问题而产生的机制。如果用传统方式解决数据一致性和冲突问题,可以通过加锁,但是无论是乐观锁还是悲观锁,对于性能都有一定的损耗,尤其是在并发冲突较多的情况下。而MVCC对一行数据的读和写两个操作默认是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥。MySQL的读已提交和可重复读隔离级别下都实现了MVCC机制。原创 2025-01-12 11:20:44 · 1219 阅读 · 0 评论 -
MySQL锁机制
MySQL的锁机制是数据库并发控制的重要组成部分,目的是防止多个事务对数据的并发访问乐观锁、悲观锁。表锁、页锁、行锁。读锁、写锁、意向锁。间隙锁、临键锁。锁的两个重要概念是粒度与冲突,锁的粒度指的是锁作用的范围,粒度越小,锁的冲突概率越低,系统的并发能力越强;但管理锁的开销也会增加。锁冲突是指两个或多个事务试图以不兼容的方式访问相同的数据。例如,一个事务试图加排他锁,而另一个事务已经持有该数据的共享锁。LOCK TABLES:手动锁定一个或多个表,可以加共享锁或排他锁。原创 2025-01-11 15:43:17 · 712 阅读 · 0 评论 -
MySQL事务
简单来说,事务是指对于一组操作的集合,这些操作要么全部执行,要么全部不执行,确保数据的一致性和完整性。事务的核心目标是保证在多个操作过程中,即使发生故障,数据也能保持一致的状态。事务并非是数据库特有的概念,操作系统中也有事务的概念,比如文件系统中的原子操作,要么执行完毕,要么不执行。以及在在分布式系统中,事务用于保证跨多个系统或服务的操作的一致性。脏读是指一个事务读取了另一个事务尚未提交的数据。如果另一个事务回滚了,这个“脏”数据就不再有效,但第一个事务已经读取了它,导致数据的不一致。幻读。原创 2025-01-11 14:33:32 · 1004 阅读 · 0 评论 -
MySQL索引优化
这条语句,实际只有name会走索引,因为name是右侧模糊匹配,得到的结果是不确定的,name字段过滤完,得到的索引行里的age和position是无序的,无法很好的利用索引。而5.6引入索引下推后,上面的sql在获取到联合索引里匹配到名字是 ‘LiLei’ 开头的索引后,还会对age和position进行过滤,用过滤后剩下的索引对应的主键id再回表查整行数据。综上所述,对于order by的优化,尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。命令,查看rows字段的值。原创 2025-01-05 17:48:15 · 1475 阅读 · 0 评论 -
MySQL性能优化explain关键字详解
当 from 子句中有子查询时,table列是 格式,表示当前查询依赖 id=N 的查询,于是先执行 id=N 的查询。因为一旦范围条件被处理,索引的扫描只能停止在范围条件的位置,因此后面的列(如 position)的条件必须通过其他方式处理,可能会导致索引的部分失效或者需要回表扫描。如果对索引列进行函数计算,例如截取,转换,也就是索引字段发生了改变,则在B+树的数据结构中就无法匹配,导致索引失效。即上面的sql语句,依照优先级,最先执行的一定是from后面的子句,因为前面的查询条件都是依赖此。原创 2025-01-05 14:38:17 · 1166 阅读 · 0 评论 -
MySQL数据结构选择
本篇着重剖析MySQL索引,以及底层关于索引数据结构的选择。原创 2025-01-04 22:21:30 · 982 阅读 · 0 评论
分享