面试题 - mysql
文章平均质量分 77
mysql
桃月十二_
这个作者很懒,什么都没留下…
展开
-
mysql面试题
当我们向某个索引对应的B+树插入记录,需要先定位到这条记录应该被插入到哪个叶子节点对应的数据页中,确定之后有两种情况:①该页恰好空间足够,能直接插入数据②该页空间不足,不能直接插入数据我们把该页称为页A对于第一种情况,数据可以直接插入页A而不会产生其他影响;对于第二种情况,页A空间不足,但数据需要插入页A,那就需要进行页分裂;页分裂过程创建一个新页B,将页A中的部分数据转移到页B中,这样就页A能空出多余的空间存储新纪录,再将页B添加到叶子节点的链表中;原创 2023-05-18 20:17:35 · 441 阅读 · 0 评论 -
mysql中的binlog
MySQL的二进制日志binlog可以说是MySQL最重要的日志,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。(需要注意的一点是,即便update操作没有造成数据变化,也是会记入binlog。一般来说开启binlog日志大概会有1%的性能损耗。原创 2023-05-18 17:32:56 · 1040 阅读 · 0 评论 -
myql中的Bufffer pool
实际上我们对数据库执行增删改操作的时候,实际上主要都是针对内存里的Buffer Pool中的数据进行的,也就是你实际上主要是对数据库的内存里的数据结构进行了增删改。同时配合了后续的redo log、刷磁盘等机制和操作。所以Buffer Pool就是数据库的一个内存组件,里面缓存了磁盘上的真实数据,然后我们的Java系统对数据库执行的增删改操作,其实主要就是对这个内存数据结构中的缓存数据执行的。转载 2023-05-17 22:58:41 · 172 阅读 · 0 评论 -
mysql中的Redo log
mysql 有多种日志,每种日志都有其特定的用途。redolog 是 mysql 存储引擎为 innodb 时,特有的日志。innodb 是 mysql 最常用的存储引擎,它的事务的持久性就是通过 redolog保证的。我们都知道,事务的四大特性里面有一个是持久性,具体来说就是只要事务提交成功,那么对数据库做的修改就被永久保存下来了,不可能因为任何原因再回到原来的状态。那么 mysql是如何保证一致性的呢?最简单的做法是在每次事务提交的时候,将该事务涉及修改的数据页全部刷新到磁盘中。原创 2023-05-15 16:12:20 · 1464 阅读 · 0 评论 -
MySQL中的LIKE查询能否用的到索引
因为索引是一种有序的 B+ Tree数据结构,叶子节点都是按照顺序从左向右排的,如果使用 like %x% 和 like %x查询的话,不知道开头是哪个,就会去进行全表扫描,这样就很好理解了。在联合索引中,使用 like x% 查询是可以用到索引的,无论是使用覆盖索引还是查询所有的字段,它都是可以使用到索引的,提高查询效率的。使用 like x% 查询是可以用得到索引的,而使用 like %x% 和 like %x 查询是用不到索引的。那么使用 like %x% 和 like %x 查询为什么用不到索引?转载 2023-04-28 16:24:35 · 96 阅读 · 0 评论 -
mysql慢查询
我们优化的思路是“收集——分析——优化——预防”了解完如何收集慢日志之后,就要开始分析 SQL 了。优化 SQL 的基础手段是 EXPLAIN,我们要收起来在此基础上,针对 SQL 语句定点优化消除。原创 2023-04-06 14:28:30 · 464 阅读 · 0 评论 -
MySQL 到底是如何加行级锁、间隙锁、临键锁的
查询的记录存在:在用「唯一索引进行等值查询」时,next-key lock 会退化成「记录锁」查询的记录不存在:在用「唯一索引进行等值查询」时,next-key lock 会退化成「间隙锁」转载 2023-03-23 13:59:27 · 837 阅读 · 0 评论 -
MySQL记录锁、间隙锁、临键锁(Next-Key Locks)详解
唯一索引等值查询:1.当查询的记录是存在的,next-key lock 会退化成「记录锁」。2.当查询的记录是不存在的,next-key lock 会退化成「间隙锁」。非唯一索引等值查询:1.当查询的记录存在时,除了会加 next-key lock 外,还额外加间隙锁,也就是会加两把锁。2.当查询的记录不存在时,只会加 next-key lock,然后会退化为间隙锁,也就是只会加一把锁。转载 2023-03-21 17:20:52 · 5294 阅读 · 3 评论 -
SQL count效率
结论:count(*) ≈ count(1) > count(id) > count(普通索引列) > count(未加索引列)count(id):id代表主键,需要从所有行的数据中解析出id字段,其中id肯定都不为null,行数+1;count(普通索引列):需要从所有行数的数据中解析出普通索引列,判断是否为null,不为空,行数+1;count(未加索引列):全表扫描所有数据,解析未加索引列,判断是否为空,不为空,行数+1;count(1):他会获取所有行的数据,每行固+1,行数+1;原创 2023-03-09 19:17:33 · 127 阅读 · 0 评论 -
从 MySQL 读取 500w 数据进行处理
大数据量操作的场景大致如下:数据迁移数据导出批量处理数据做法:常规查询: 一次性读取 100w 数据到 JVM 内存中,或者分页读取流式查询: 建立长连接,利用服务端游标,每次读取一条加载到 JVM 内存(多次获取,一次一行)游标查询: 和流式一样,通过 fetchSize 参数,控制一次读取多少条数据(多次获取,一次多行)默认的 RowDataStatic 读取全部数据到客户端内存中,也就是我们的 JVM;RowDataDynamic 每次 IO 调用读取一条数据;转载 2023-03-05 16:03:04 · 972 阅读 · 0 评论 -
数据库常见死锁原因及处理
数据库是一个多用户使用的共享资源,当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严重影响应用的正常执行。在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它原创 2022-12-07 14:39:53 · 14275 阅读 · 1 评论 -
mysql 数据丢失更新的解决方法
对于账户交易建议直接使用悲观,数据库的性能很高,并发度不是很高的场景两者性能没有太大差别。如果是交易减库存的操作可以考虑乐观锁,保证并发度。转载 2022-11-13 19:20:19 · 856 阅读 · 0 评论 -
MySQL中between...and的使用对索引的影响
自己还测了更大的数据,发现betweet…and的使用与单纯的数据量无关,而与。转载 2022-11-13 17:00:00 · 3901 阅读 · 0 评论 -
【SQL优化】海量数据大页码MySQL查询该如何优化
其实大部分场景下,用户并不关心第一万页的数据,所以大部分情况下,连续分页就可以满足展示需求。PC端,仅展示上一页、下一页;PC端,仅展示100页数据(可以考虑)App端,上拉加载。原创 2022-10-29 11:38:12 · 736 阅读 · 0 评论 -
Mysql时间范围查询走不走索引问题
因此,在进行范围查询时,比如>、< 、>=、转载 2022-10-26 15:29:10 · 5625 阅读 · 0 评论 -
【面试题 - mysql】进阶篇 - 存储引擎
存储引擎原创 2022-09-08 20:37:57 · 153 阅读 · 0 评论 -
【面试题 - mysql】事务
事务是一组操作的集合,事务会把所有操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。原子性(Atomicity):事务是不可分割的最小操作但愿,要么全部成功,要么全部失败。持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。一致性(Consistency):事务完成时,必须使所有数据都保持一致状态。原创 2022-09-08 15:27:48 · 187 阅读 · 0 评论 -
【面试题 - mysql】进阶篇 - 索引
索引是帮助 MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引。原创 2022-09-08 20:36:11 · 419 阅读 · 0 评论 -
【面试题 - mysql】进阶篇 - Sql优化
根据排序字段建立合适的索引,多字段排序时,也遵循最左前缀法则尽量使用覆盖索引多字段排序,一个升序一个降序,此时需要注意联合索引在创建时的规则(ASC/DESC)如果不可避免出现filesort,大数据量排序时,可以适当增大排序缓冲区大小 sort_buffer_size(默认256k)原创 2022-09-08 23:01:33 · 422 阅读 · 0 评论 -
【面试题 - mysql】进阶篇 - 锁
全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,保证数据的完整性。我们知道InnoDB的B+树索引,叶子节点是有序的双向链表。假如,我们要根据这个二级索引查询值为18的数据,并加上共享锁,我们是只锁定18这一行就可以了吗?并不是,因为是非唯一索引,这个结构中可能有多个18的存在,所以,在加锁时会继续往后找,找到一个不满足条件的值(当前案例中也就是29)。原创 2022-09-09 10:27:01 · 726 阅读 · 0 评论 -
【面试题 - mysql】进阶篇 - MVCC多版本并发控制原理
原因就是因为普通的select是快照读,而在当前默认的RR隔离级别下,开启事务后第一个select语句才是快照读的地方,后面执行相同的select语句都是从快照中获取数据,可能不是当前的最新数据,这样也就保证了可重复读。最终我们发现,不同事务或相同事务对同一条记录进行修改,会导致该记录的undolog生成一条记录版本链表,链表的头部是最新的旧记录,链表尾部是最早的旧记录。①不满足 ②满足。简单的select(不加锁)就是快照读,快照读,读取的是记录数据的可见版本,有可能是历史数据,不加锁,是非阻塞读。原创 2022-09-09 11:42:30 · 1107 阅读 · 1 评论 -
【面试题 - mysql】进阶篇 - 主从复制
主从复制是指将主数据库的 DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。MySQL支持一台主库同时向多台从库进行复制, 从库同时也可以作为其他从服务器的主库,实现链状复制。原创 2022-09-09 15:25:43 · 318 阅读 · 0 评论 -
【面试题 - mysql】进阶篇 - 分库分表
在MyCat的逻辑结构主要负责逻辑库、逻辑表、分片规则、分片节点等逻辑结构的处理,而具体的数据存储还是在物理结构,也就是数据库服务器中存储的。原创 2022-09-09 17:40:28 · 1961 阅读 · 0 评论 -
【面试题 - mysql】进阶篇 - MySQL三大日志(binlog、redo log和undo log)
MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性,使用 undo log(回滚日志) 来保证事务的原子性。MySQL数据库的数据备份、主备、主主、主从都离不开binlog,需要依靠binlog来同步数据,保证数据一致性。原创 2022-09-17 13:59:35 · 610 阅读 · 0 评论