![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySQL
文章平均质量分 91
Java知识库
擅长JVM,Mysql,微服务架构性能调优,Spring Cloud Netfilx等常用框架源码解析Redis,等中间件技术架构设计及领域驱动设计。
展开
-
探讨MySQL事务特性和实现原理
事务的原子性指的是构成事务的所有操作要么全部执行成功,要么全部执行是失败。本地事务分布式事务本文主要讲述了事务的特性、类型和本地事务和分布式事务的区别,通过不同的示例解释并发事务带来的更新丢失、脏读、不可重复读、幻读的问题,同时介绍了多版本并发控制MVCC的实现原理。原创 2023-02-10 10:32:38 · 283 阅读 · 0 评论 -
完爆90%的性能毛病,数据库优化八大通用绝招
数据库的优化方案核心本质有三种:减少数据量、用空间换性能、选择合适的存储系统,这也对应了开篇讲解的慢的三个原因:数据总量、高负载、*查找的时间复杂度。*这里大概解释下收益类型:短期收益,处理成本低,能紧急应对,久了则会有技术债务;长期收益则跟短期收益相反,短期内处理成本高,但是效果能长久使用,扩展性会更好。静态数据意思是,相对改动频率比较低的,也无需过多联表的,where过滤比较少。动态数据与之相反,更新频率高,通过动态条件筛选过滤。原创 2023-01-05 11:40:48 · 355 阅读 · 0 评论 -
美团一面:能不能通俗的解释下为什么要有意向锁这个东西?
注意这里的自动:申请意向锁的动作是数据库完成的,就是说,事务 A 申请一行的行锁的时候,数据库会自动先开始申请表的意向锁,不需要我们程序员使用代码来申请。意向共享锁/读锁(IS Lock):当事务想要获得一张表中某几行的读锁(行级读锁)时,InnoDB 存储引擎会自动地先获取该表的意向读锁(表级锁)在意向锁存在的情况下,事务 A 如果想申请行级读锁,就必须先申请该表的意向读锁,申请成功后才能继续申请某行记录的行级读锁。看起来没有什么困难的,但请注意步骤 2,判断表中的每一行,各位,如何判断?原创 2022-12-29 10:55:07 · 576 阅读 · 0 评论 -
无效回表谁的锅?存储引擎:这事儿不赖我
要回答这个问题,我们一般分几步来走:1.确认问题,对齐Sql语句;2.解答问题本身,也就是时间复杂度分析;3.针对本身提出这个场景,可能出现的性能瓶颈进行分析;4.针对瓶颈,提出多种优化手段。接下来我们就按照这个思路来一步步深入。通常而言,面试官抛出一个问题,不见得就是一个非常完善、非常准确的描述,他其实是希望你能提出问题,通过沟通对齐,这也是工作中必备的能力。原创 2022-12-21 10:25:01 · 335 阅读 · 0 评论 -
关于幻读,该捋清楚了
小伙伴们都知道,MySQL 有四种不同的隔离级别,四种不同的隔离级别会带来三种不同的问题,今天我想再和大家捋一捋这个问题。原创 2022-12-19 14:25:40 · 1105 阅读 · 0 评论 -
聊聊 MySQL 日志,好牛的设计
日志是mysql数据库的重要组成部分,记录着数据库运行期间各种状态信息。mysql日志主要包括错误日志、查询日志、慢查询日志、事务日志、二进制日志几大类。作为开发,我们重点需要关注的是二进制日志(binlog)和事务日志(包括redo log和undo log),本文接下来会详细介绍这三种日志。原创 2022-12-17 09:57:03 · 548 阅读 · 0 评论 -
骨灰级精品,京东百万架构师亲码的MySQL内部笔记太硬核了
作为最为流行的开源数据库软件之一,MySQL 数据库软件已经是广为人知了。但是为了照顾对 MySQL 还不熟悉的读者,这章我们将对 MySQL 做一个简单的介绍。主要内容包括MySQL 各功能模块组成,各模块协同工作原理,Query 处理的流程等。原创 2022-12-16 15:33:55 · 625 阅读 · 0 评论 -
图解 SQL,这也太形象了吧
📝SQL 中的关系概念来自数学中的集合理论,因此 UNION、INTERSECT 和 EXCEPT 分别来自集合论中的并集(∪\cup∪)、交集(∩\cap∩)和差集(∖\setminus∖)运算。EXCEPT 或者 MINUS 操作符用于返回两个集合的差集,即出现在第一个查询结果中,但不在第二个查询结果中的记录,并且排除了结果中的重复数据。INTERSECT 操作符用于返回两个集合中的共同部分,即同时出现在第一个查询结果和第二个查询结果中的数据,并且排除了结果中的重复数据。如果没有就返回空值。原创 2022-12-15 09:42:57 · 331 阅读 · 0 评论 -
面试官:MySQL 中 varchar(n) 中 n 最大取值为多少?
要回答这个问题,首先我们得先知道 MySQL 存储一条记录的格式长什么样子。以 Compact 行格式作为例子,它长这样:可以看到,一条完整的记录分为「记录的额外信息」和「记录的真实数据」两个部分。这里重点讲讲记录的额外信息,它包含 3 个部分:变长字段长度列表、NULL 值列表、记录头信息。变长字段长度列表用于存储一行记录中每个变长字段的长度。「变长字段长度列表」所占用的字节数 = 所有「变长字段长度」占用的字节数之和。举个例子,假设数据库表中有 2 个 varchar(10) 类型的字段,分别为 a原创 2022-12-08 09:44:04 · 803 阅读 · 0 评论 -
1亿条数据批量插入 MySQL,哪种方式最快?
能够看到,在开启事务下 JDBC直接处理 和 JDBC批处理 均耗时更短。Mybatis 轻量级框架插入 , mybatis在我这次实验被黑的可惨了,哈哈。实际开启事务以后,差距不会这么大(差距10倍)。大家有兴趣的可以接着去测试JDBC直接处理,在本次实验,开启事务和关闭事务,耗时差距5倍左右,并且这个倍数会随着数据量的增大而增大。因为在未开启事务时,更新10000条数据,就得访问数据库10000次。导致每次操作都需要操作一次数据库。原创 2022-11-29 10:20:00 · 661 阅读 · 0 评论 -
MySQL 不相关子查询怎么执行?
对于 where 条件包含子查询的 SQL,我们可以做一点优化,就是把这类 where 条件放在最后,让 MySQL 能够少做一点无用功,提升 SQL 执行效率。原创 2022-11-21 10:43:18 · 894 阅读 · 0 评论 -
2 万字 + 30 张图搞懂 MySQL 的行级锁!
这次我以版本,在可重复读隔离级别之下,做了几个实验,让大家了解了唯一索引和非唯一索引的行级锁的加锁规则。我这里总结下, MySQL 行级锁的加锁规则。唯一索引等值查询:当查询的记录是「存在」的,在索引树上定位到这一条记录后,将该记录的索引中的 next-key lock 会退化成「记录锁」。当查询的记录是「不存在」的,在索引树找到第一条大于该查询记录的记录后,将该记录的索引中的 next-key lock 会退化成「间隙锁」。原创 2022-11-18 20:03:12 · 236 阅读 · 0 评论 -
学习MySQL必须掌握的13个关键字,你get了吗?
自定义变量是一个用来存储内容的临时容器,在连接MySQL的整个过程中都存在。可以使用set的方式定义。使用自定义变量的查询,无法使用缓存;不能在使用常量或标识符的地方使用自定义变量,比如表名、列名和limit子句中;自定义变量的生命周期实在一个连接中有效,不能用它们做连接间的通信;避免重复查询刚刚更新的数据如果在更新行的同时又想获得该行的信息,要怎么做才能避免重复地查询呢?看上去还是两个查询,但是第二次查询无须访问任何数据表,所以会快很多。原创 2022-11-14 10:46:26 · 4563 阅读 · 0 评论 -
面试官:数据库加了唯一索引,就不会有重复数据了吗???
前段时间我踩过一个坑:在mysql8的一张innodb引擎的表中,加了唯一索引,但最后发现数据竟然还是重复了。到底怎么回事呢?本文通过一次踩坑经历,聊聊唯一索引,一些有意思的知识点。原创 2022-10-24 10:27:57 · 255 阅读 · 0 评论 -
1亿条数据批量插入 MySQL,哪种方式最快?
能够看到,在开启事务下 JDBC直接处理 和 JDBC批处理 均耗时更短。Mybatis 轻量级框架插入 , mybatis在我这次实验被黑的可惨了,哈哈。实际开启事务以后,差距不会这么大(差距10倍)。大家有兴趣的可以接着去测试JDBC直接处理,在本次实验,开启事务和关闭事务,耗时差距5倍左右,并且这个倍数会随着数据量的增大而增大。因为在未开启事务时,更新10000条数据,就得访问数据库10000次。导致每次操作都需要操作一次数据库。原创 2022-10-23 13:25:08 · 288 阅读 · 0 评论 -
Mysql查询好慢,除了索引,还有什么原因?
数据查询过慢一般是索引问题,可能是因为选错索引,也可能是因为查询的行数太多。客户端和数据库连接数过小,会限制sql的查询并发数,增大连接数可以提升速度。innodb里会有一层内存buffer pool用于提升查询速度,命中率一般>99%,如果低于这个值,可以考虑增大buffer pool的大小,这样也可以提升速度。查询缓存(query cache)确实能为查询提速,但一般不建议打开,因为限制比较大,并且8.0以后的Mysql里已经将这个功能干掉了。原创 2022-09-28 16:35:02 · 384 阅读 · 0 评论 -
美团二面:考我幻读,结果答的不好
首先来看看 MySQL 文档是怎么定义幻读(Phantom Read)的:翻译:当同一个查询在不同的时间产生不同的结果集时,事务中就会出现所谓的幻象问题。只要 T1 和 T2 时刻执行产生的结果集是不相同的,那就发生了幻读的问题,比如:T1 时间执行的结果是有 5 条行记录,而 T2 时间执行的结果是有 6 条行记录,那就发生了幻读的问题。T1 时间执行的结果是有 5 条行记录,而 T2 时间执行的结果是有 4 条行记录,也是发生了幻读的问题。MySQL 是怎么解决幻读的?原创 2022-09-08 13:49:19 · 384 阅读 · 1 评论