首页
关于
在线视频
Search
1
必会知识点-JUC
3 阅读
2
必会知识点-Mysql
2 阅读
3
必会知识点-Redis
2 阅读
4
必会知识点-Spring
2 阅读
5
必会知识点-JVM
2 阅读
后端
Java
Python
PHP
Golang
前端
Vue
数据库
Mysql
Redis
中间件
RabbitMQ
登录
Search
标签搜索
JUC
Spring
redis
mysql
So
累计撰写
5
篇文章
累计收到
0
条评论
首页
栏目
后端
Java
Python
PHP
Golang
前端
Vue
数据库
Mysql
Redis
中间件
RabbitMQ
页面
关于
在线视频
搜索到
2
篇与
的结果
2025-07-21
必会知识点-Mysql
MYSQLSQL执行原理连接器->查询缓存->解析器->优化器->执行器8.0查询缓存去除了 在高并发和数据变化频繁(复杂查询类似带时间戳的)的现代应用场景中,查询缓存的性能逐渐消失,甚至可能成为性能瓶颈,不如直接在应用层做缓存,减轻数据压力。SQL执行顺序From:确定表Join:链接表开始组合数据where:初步筛选过滤行group by:对数据进行分组Having:对分组后的数据进行过滤Select:查询Distinct:去重Order By:排序Limit:限制返回行数经典例子where中使用select的别名会报错 group by可以使用是因为优化器的原因索引结构b+tree索引分类聚簇索引 :叶子节点存放整行数据非聚簇索引:叶子节点存放的是索引列和对应的主键回表查询查询的列没有在索引列中,查询没有完整查询到,需要去聚簇索引上查找剩余的列。覆盖索引查询的列都在索引中全覆盖 无需要回表查询。索引下推举一个例子:一个查询语句 select * from user where name ='"张三" and age ="64"之前的查询过程是:引擎层只对第一个条件进行过滤,判断是否回表后,然后将其它的过滤添加交给server层。有了索引下推后是:引擎层先过滤name在过滤age 然后在判断是否回表。过滤条件尽可能的下推在引擎层执行,减少无用的回表查询 称为索引下推索引失效左百分号:因为索引树的特性,叶子节点是双向链表 ,有序的,百分号会导致索引不可用,全表扫描。最左前缀:使用了联合索引,必须从最左的字段进行匹配对列进行运算或函数:例如year(birthday) ,索引中找不到哪一段是2020 只能每个值进行year()select *:不走索引使用or:分开查找然后合并 某些字段如果没有索引 优化器会选择全表扫描order by:排序字段顺序与索引不一致时,无法使用索引顺序not in和not exists:排除逻辑字段类型不同索引优化ExPlain锁表级锁表锁表共享读锁(Read Lock,读锁)表独占写锁(Write Lock,写锁)有写锁就会堵塞元数据锁防止DML和DDL语句冲突的锁alter语句会加表锁吗?5.6之前 执行DDL语句的时候,整个表都会堵塞。5.6引入了OnlineDDL,允许在执行DDL的时候,DML同时进行。DDL算法COPY算法(早期)DDL操作下会生成临时表,将原表数据复制到新表中,期间会堵塞DML。INPLACE 算法(5.6) nplace-no-rebuild :对二级索引的增删改查、修改字段长度、重命名列名都不需要重建原表inplace-rebuild:修改主键索引、增加删除列、修改字符集、创建全文索引等都需要重建原表。INSTANT算法(8.0.1)个别操作可以直接修改表的元数据,省掉了重建原表的过程意向锁意向锁是为了在加表锁前,不必逐行检查是否加了行锁,而是通过表级意向锁快速判断是否有冲突。行级锁行锁共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁排他锁(X):允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁注意事项针对唯一索引进行检索时,对已存在的记录进行等值匹配时,将会自动优化为行锁lnnoDB 的行锁是针对于索引加的锁,不通过索引条件检索数据,那么 InnoDB 将对表中的所有记录加锁,此时就会升级为表锁有排他就堵塞间隙锁用于防止幻读,对表中的一个范围进行锁定(20,25)(25,30)临键锁是间隙锁和行锁的组合,用于防止幻读、修改或删除范围内的行(20,25)25事务四大特性一致性,隔离性,持久性,原子性隔离级别读未提交RU脏读、幻读、不可重复读读已提交RC幻读、不可重复读可重复读RR幻读串行化脏读、幻读、不可重复读脏读: 事务A可以查询到事务B为提交的数据不可重复读:事务A可以查询到事务B已提交的数据(修改结果,不一致)幻读:事务A可以查询到事务B已提交的数据(新增,结果集不同)MVCC多版本并发控制+为解决幻读而生实现依赖于Undolog+ReadView当前读读取记录的最新版本select ... for update快照读普通的select语句rc每一次查询,都会产生一个快照读rr开启事务后的第一个select,才会产生一个快照读隐藏字段创建表后会有三个个隐藏字段db_trx_id 事务IDdb_roll_ptr 回滚指针db_row_id 没有指定主键,默认的主键undolog维护了一个数据的多个版本当执行insert语句产生的insert语句 只在事务提交的时候有用,事务提交后就没用了,可以删除。update或delete语句不仅仅是提交 在MVCC中可能会用到。readview读视图三大日志undolog(回滚日志)作用事务回滚和解决幻读问题记录数据被修改前的neritic,提供回滚操作,保证原子性用于MVCC原理问题redolog(重做日志)作用当系统出现异常的时候,可以快速恢复数据。对应四大特性中的持久性。修改了,即使发生系统奔溃,数据也应该被保留,支持后续恢复。wal日志先写的体现原理一个事务在运行过程中是不会直接进行操作磁盘上的数据的,而是有一个bufferpool的缓存池,首先会修改bufferpool的数据,同时写入redologbuffer中,当事务提交的时候,会通过已经设置好的刷盘策略写入redolog文件中。问题redolog写入的是什么文件记录的是哪个页发生了哪些物理变化。类似哪个表空间,哪个页,偏移量和修改的值。为什么不直接写入磁盘 idb文件中一次事务提交大部分操作的是数据基本都不在同一个页中,在磁盘中是随机的,带来的损耗和时间大,但是写入一个新的文件是顺序写。刷盘策略有哪些刷盘策略是指从redobuffer中写入redolog文件中的过程定期刷盘提交时写入写入系统缓存中,由系统去操作redolog日志redolog日志是一个环形的结构,多个文件,一个检查点 一个写入点。当写入位置追上检查位置的时候,会发生堵塞,事务卡在提交。binlog(归档日志)作用保存所有执行过的修改数据的语句,当不小心删除了表中的数据,可以通过 binlog 来恢复。二阶段提交解决redolog和binlog 一致性先redolog prepare 然后binlog 然后redolog commit
2025年07月21日
2 阅读
0 评论
0 点赞
2025-07-21
必会知识点-Redis
暂无简介
2025年07月21日
2 阅读
0 评论
0 点赞