![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 88
努力学习的小飞侠
这个作者很懒,什么都没留下…
展开
-
MySQL之基于代价的慢查询优化建议
一条 SQL 在 MySQL 服务器中执行流程主要包含:SQL 解析、基于语法树的准备工作、优化器的逻辑变化、优化器的代价准备工作、基于代价模型的优化、进行额外的优化和运行执行计划等部分。而对于优化器来说,执行一条 SQL 有各种各样的方案可供选择,如表是否用索引、选择哪个索引、是否使用范围扫描、多表 Join 的连接顺序和子查询的执行方式等。如何从这些可选方案中选出耗时最短的方案呢?这就需要定义一个量化数值指标,这个指标就是代价 (Cost),我们分别计算出可选方案的操作耗时,从中选出最小值。原创 2024-01-04 21:17:07 · 826 阅读 · 0 评论 -
MySQL之性能分析和系统调优
EXPLAIN作为MySQL的性能分析神器,可以用来分析SQL执行计划,需要理解分析结果可以帮助我们优化SQL表名 查询的每一行记录都对于着一张表该语句的唯一标识。如果explain的结果包括多个id值,则数字越大越先执行;而对于相同id的行,则表示从上往下依次执行。每一个子查询在语句中扮演的角色当前查询匹配记录的分区执行查询时的访问方法system:表中只有一个数据并且使用的存储引擎的统计数据是精确的,有一个变量记录(比如myisam memory)原创 2023-12-01 22:09:52 · 1053 阅读 · 0 评论 -
MySQL之锁
锁是计算机在执行多线程或线程时用于并发访问同一共享资源时的同步机制,MySQL中的锁是在服务器层或者存储引擎层实现的,保证了数据访问的一致性与有效性MySQL锁可以按模式分类为:乐观锁与悲观锁。按粒度分可以分为全局锁、表级锁、页级锁、行级锁按属性可以分为:共享锁(读锁/S锁)、排它锁(写锁/X锁)按状态分为:意向共享锁、意向排它锁按算法分为:间隙锁、临键锁、记录锁。原创 2023-12-01 12:31:35 · 1006 阅读 · 0 评论 -
MySQL之 InnoDB逻辑存储结构
InnoDB将所有数据都存放在表空间中,表空间又由段(segment)、区(extent)、页(page)组成。InnoDB存储引擎的逻辑存储结构大致如下图。下面我们就一个个来看看。原创 2023-11-30 21:12:40 · 942 阅读 · 0 评论 -
MySQL之索引
在MySQL中存储大量的数据,那么数据如何组织能进行高效的数据库操作就显得尤为重要,那么就是帮助数据库高效获取数据的。原创 2023-11-30 16:31:46 · 1174 阅读 · 0 评论 -
MySQL之存储引擎
介绍:InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。xxx.ibd:XXX代表的是表明,InnoDB引擎的每张表都会对应着这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。。原创 2023-11-28 22:51:55 · 510 阅读 · 0 评论 -
MySQL之MVCC原理详解
谈起MVCC,就不得不说到事务隔离级别,因为MVCC是为了实现数据库的隔离级别,保证事务并发的情况下数据安全的同时还能保持高性能的方式。在事务并发的场景下会引起问题,MySQL支持四种隔离级别来解决事务并发中的这些问题。:只限制两个数据不能同时修改,但是修改数据的时候,即使事务未提交也可能读到未提交的数据,这种隔离级别仍有问题:当前事务只能读取到其他事务提交的数据,解决了脏读问题,但还是存在问题:限制了读取数据的时候,不可以进行修改,所以的问题,但是读取范围数据的时候,是可以插入数据,所以还会存在问题;原创 2023-11-28 17:44:55 · 1471 阅读 · 0 评论 -
MySQL三大日志详细总结(redo log undo log binlog)
在执行更新语句时,会记录到redo log和binlog两块日志,以基本事务为单位,redo log在事务的执行过程中能够不断写入,binlog只能在事务提交的时候写入为了解决两份日志之间逻辑一致问题,innodb存储引擎采用了两阶段提交方案,将redo log写入拆成了prepare和commit两个阶段,这就是两阶段提交。原创 2023-11-27 20:35:00 · 1500 阅读 · 0 评论 -
MySQL之undo日志
undo log(回滚事务),在事务没有提交前,MySQL将记录更新操作的反向操作到undo log日志中,以便进行回退保证事务的原子性。原创 2023-11-27 20:26:29 · 1067 阅读 · 0 评论 -
MySQL之binlog日志
在执行更新语句时,会记录到redo log和binlog两块日志,以基本事务为单位,redo log在事务的执行过程中能够不断写入,binlog只能在事务提交的时候写入为了解决两份日志之间逻辑一致问题,innodb存储引擎采用了两阶段提交方案,将redo log写入拆成了prepare和commit两个阶段,这就是两阶段提交。原创 2023-11-27 19:33:17 · 1086 阅读 · 0 评论 -
MySQL之redo log
当我们查询一条记录时会把一整页的数据加载出来放到buffer poll中,后续的查找只需要查找buffer poll中有没有数据,有则更新buffer poll中的数据再进行刷盘操作完成数据持久化,与内存进行IO的效率明显远高于磁盘IO,虽然效率是提高了但我们也发现如果我们的MySQL实例挂了或者宕机,内存中数据丢失,我们更新buffer poll中的数据尚未刷盘到磁盘就会造成数据的丢失。第三步,事务提交后,通过一定的刷盘时机将redo log buffer中的内容刷新到redo log file中。原创 2023-11-27 17:52:00 · 1072 阅读 · 0 评论