mysql
文章平均质量分 62
Shen_Li_Java_ing
加电!加电!!加电!!!
展开
-
mysql索引失效到底有哪几种情况,一次性给你说明白。
像网上说的八股文说什么like、between会索引失效,但我不这样看,他也有可能索引下推了,其实数据量也是一个影响因素,如果走索引之后,没有覆盖,还要回表的话,在数据量少的场景下,它可能会直接走全表扫描,因为他走索引还要遍历2棵B+树,其实mysql优化器会进行推断的,如果它发现走索引还不如直接走全表,那他为什么不直接走全表呢。这样对外的表现形式就是看起来索引失效了。注意,优化器也只是推断,到底哪种方式性能高,不一定,所以有时候也会需要人工explain分析看到底哪种方式效率高。原创 2024-05-04 19:20:25 · 468 阅读 · 0 评论 -
mysql的默认隔离级别是RR,那它有解决幻读吗?
互联网公司用的隔离级别是rc,幻读就无法避免,幻读其实是一种现象,我读到了别人插入的数据,这很正常,从业务逻辑方面去规避它就行了。当前读 没有彻底解决 那当前读怎么解决,用间隙锁 select for update。解决了 但是只是解决了快照读语义下的幻读。原创 2024-05-03 20:22:58 · 222 阅读 · 0 评论 -
SQL如何优化(遥遥领先版),你还只知道explain吗?
当sql执行时间比较慢的时候,可能会带来一些接口超时,用户体验不好,所以要进行sql优化。原创 2024-05-03 20:21:05 · 776 阅读 · 0 评论 -
INNODB和MyISAM有什么区别
总的来说,InnoDB和MyISAM各有优缺点,选择哪种存储引擎取决于具体的应用场景和需求。如果需要支持事务处理、外键约束和更高的数据一致性,那么InnoDB可能是更好的选择。而如果更关注存储和检索速度,并且不需要事务处理和外键约束,那么MyISAM可能更适合。InnoDB和MyISAM是MySQL数据库中两种常见的存储引擎,它们之间存在一些重要的区别。原创 2024-05-02 22:21:43 · 441 阅读 · 0 评论 -
MVCC如何根据read view结合行数据的undo log版本链过滤数据的?
如果最终判断行数据的最新undo log事务id读取不到数据,那么就会根据undo log版本链继续往前一个节点,获取新的事务id重新对比,继续过滤,直到找到一个符合规则的数据。:行数据的最新undo log事务id比最大事务id还大,说明产生这条undo log的事务在read view产生时刻都还没有开启,那肯定读不到.:行数据的最新undo log事务id比min_trx_id还小,说明这个产生这条undo log的事务在read view产生时刻已经被提交了。行数据的最新undo log事务id。原创 2024-05-02 22:15:12 · 786 阅读 · 0 评论 -
聊聊Mysql的两阶段提交
将修改写入到 bin log,然后将 bin log 持久化到磁盘,之后将 redo log 状态设置为 commit,(此时该状态并不需要持久化到磁盘,只需要 write 到文件系统的 page cache 中就够了,因为只要 bin log 写磁盘成功,就算 redo log 的状态还是 prepare 也没有关系,一样会被认为事务已经执行成功;:将 事务的修改写入到 redo log,同时将 redo log 对应的事务状态设置为 prepare,然后将 redo log 持久化到磁盘;原创 2024-04-30 20:03:56 · 567 阅读 · 1 评论 -
MVCC多版本并发控制、redo log 、bin log 、undo log知识梳理
MVCC(多版本并发控制)————(一行数据他有版本链,有多个版本)(他可能被多个线程一起读,也有可能一个线程写,其他线程读)(读取的结果) 他其实就是利用undo log的版本链加上read view读视图去构成一个数据的过滤的逻辑。原创 2024-04-30 20:01:43 · 327 阅读 · 0 评论 -
Mysql也有缓存,你知道吗
开启事务后,InnoDB 层更新记录前,首先要记录相应的 undo log,如果是更新操作,需要把被更新的列的旧值记下来,也就是要生成一条 undo log,undo log 会写入 Buffer Pool 中的 Undo 页面。所以,MySQL 刚启动的时候,你会观察到使用的虚拟内存空间很大,而使用到的物理内存空间却很小,这是因为只有这些虚拟内存被访问后,操作系统才会触发缺页中断,申请物理内存,接着将虚拟地址和物理地址建立映射关系。,以页作为磁盘和内存交互的基本单位,一个页的默认大小为 16KB。原创 2024-04-29 16:47:15 · 331 阅读 · 0 评论 -
Mysql执行一条更新语句的流程
Mysql执行一条更新语句的流程。原创 2024-04-29 16:42:58 · 367 阅读 · 0 评论 -
Mysql事务—隔离级别—脏读、不可重复读、幻读-遥遥领先版
事务就是一组原子性的操作,这些操作要么全部发生,要么全部不发生。事务把数据库从一种一致性状态转换成另一种一致性状态。事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。原创 2024-04-28 17:00:13 · 1060 阅读 · 0 评论 -
索引下推和索引跳跃
Index Condition Pushdown(索引下推) MySQL 5.6引入了索引下推优化,默认开启,使用SET optimizer_switch = ‘index_condition_pushdown=off’;可以将其关闭。官方文档中给的例子和解释如下: people表中(zipcode,lastname,firstname)构成一个索引。原创 2024-04-27 13:22:59 · 445 阅读 · 0 评论 -
Mysql索引篇
举个简单的例子,假设我们在员工表的成绩上建立了索引,那么当进行select score from student where score >90的查询时,在索引的叶子节点上,已经包含了score 信息,不会再次进行回表查询。MySQL使用索引时需要索引有序,假设现在建立了"name,age,school"的联合索引,那么索引的排序为:先按照name排序,如果name相同,则按照age排序,如果age的值也相等,则按照school进行排序。一个索引包含(覆盖)所有需要查询字段的值,被称之为"覆盖索引"。原创 2024-04-26 22:18:45 · 832 阅读 · 0 评论 -
Mysql索引规范及原理分析
在mysql中,索引是存储引擎用于快速找到记录的一种数据结构。索引的本质就是通过不断的缩小想要获取数据的范围来筛选出最终想要的结果。类似我们查字典,每一个字相当于一条数据,索引相当于目录,可以根据拼音或者偏旁部首快速查询出页码,进而查询到对应的信息。总结来说,索引对于提升系统性能有较大的帮助,需要进一步的了解它。问题1:为什么SQL查询很慢?解答:未创建索引。问题2:已经添加了索引,为什么SQL仍然很慢?解答:未创建正确索引。索引无效。mysql优化器选择其他索引。原创 2024-04-26 22:10:25 · 986 阅读 · 0 评论 -
Mysql基础篇
因为在InnoDB存储引擎中,主键索引是作为聚簇索引存在的,主键索引的B+树叶子节点上存储了主键索引以及全部的数据(按照顺序),在插入过程中尽量减少页分裂,即使要进行页分裂,也只会分裂很少一部分。总之就是减少分裂和移动的频率。MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针,主键索引和辅助索引是独立的。段(segment): 每个段有32个碎片页,段中的空间首先保存在这32个页中,超出容量后再以区的方式申请空间,段的这种页和区混合管理的方式,是出于对存储空间尽量节约的角度考虑;原创 2024-04-25 19:26:46 · 932 阅读 · 0 评论 -
InnoDB存储引擎的内存结构
InnoDB不支持手动创建哈希索引的,但是InnoDB会进行自调优,如果判断建立自适应哈希索引能够提升查询效率,InnoDB就会在自己的内存中创建相关的Hash索引。自适应指的是不需要人工手动干预,InnoDB会根据自己的需求去创建自适应Hash索引。Log Buffer: 日志缓冲区,用来缓存写入磁盘上log文件(Redo、Undo)的数据,日志缓冲区的内容会定期的刷新到磁盘Log文件中。从MSQL5.5版本开始,默认使用的就是InnoDB存储引擎,它擅长处理事务,具有自动崩溃恢复的特性,使用非常广泛。原创 2024-04-24 21:56:45 · 240 阅读 · 0 评论