
MySQL
文章平均质量分 94
MySQL数据库的用法和经验分享
码农兴哥
纸上得来终觉浅,绝知此事要躬行。
展开
-
深入理解MySQL中的事务和锁
事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。事务的四大特性 ACID(Atomicity、Consistency、Isolation、Durability),分别是原子性、一致性、隔离性和持久性。在这四个特性中,原子性是基础,隔离性是手段,一致性是约束条件,而持久性是目的。原创 2023-04-28 00:19:31 · 1087 阅读 · 3 评论 -
数据库中的事务、undo log、redo log、binlog都是干啥的?
由于事务的机制比较复杂,涉及 redo log 和 undo log 的各种配合,所以需要考虑到事务执行过程的各种异常情况。当中途某个操作执行成功了,万一数据库宕机,数据库恢复过来之后会怎么处理这个事务。在 redo log 刷新到磁盘之前,都是回滚。如果 redo log 刷新到了磁盘,那么就是重放 redo log。如果 binlog 都已经提交成功了,那么就重放,否则就是回滚。如果回滚,用 undo log 来恢复数据。如果没有 undo log 就没有后悔药,没有办法回滚。原创 2024-06-25 15:04:10 · 1035 阅读 · 0 评论 -
数据库中锁的机制和MVCC协议以及隔离级别
数据库中为什么需要「锁」,顾名思义,锁就是为了解决并发问题的,就像是一个柜子加了一把锁,那么其他没有钥匙的人都打不开这个柜子(无法写入数据)。在 MySQL 的 InnoDB 引擎里面,锁和索引、隔离级别都是有密切关系的,锁是依赖于索引来实现的。如果一个查询用了索引,那么会用行锁;如果没用到任何索引,那么就会用表锁。此外,在 MySQL 里面,间隙锁和临键锁是只工作在可重复读这个隔离级别下的。原创 2024-06-05 14:58:28 · 1472 阅读 · 0 评论 -
数据库中索引的底层原理和SQL优化
从数据结构上来说,在 MySQL 里面索引主要是 B+ 树索引。它的查询性能更好,适合范围查询,也适合放在内存里。MySQL 的索引又可以从不同的角度进一步划分。比如说根据叶子节点是否包含数据分成聚簇索引和非聚簇索引,还有包含某个查询的所有列的覆盖索引等等。数据库使用索引遵循最左匹配原则。但是最终数据库会不会用索引,也是一个比较难说的事情,跟查询有关,也跟数据量有关。在实践中,是否使用索引以及使用什么索引,都要以 EXPLAIN 为准。原创 2024-05-06 14:42:11 · 1218 阅读 · 2 评论 -
缓存雪崩、缓存击穿、穿透穿透具体指哪些问题?
缓存雪崩是指大量的应用请求无法在 Redis 缓存中进行处理,紧接着应用将大量请求发 送到数据库层,导致数据库层的压力激增。缓存雪崩的一个原因是:缓存中有大量数据同时过期,导致大量请求无法得到处理。解决办法:避免给大量的数据设置相同的过期时间。现在有个电商平台双十一抢购,00:00 的时候把要抢购的一波商品同时放入了缓存,缓存过期的时间比较集中,假设缓存一个小时,那么到了凌晨一点钟的时候这批商品的缓存就都过期了。而对这批商品的访问查询,都落到了数据库上,对于数据库而言,就会产生周期性的压力波峰。原创 2023-05-06 22:33:07 · 268 阅读 · 1 评论 -
MySQL分区分库分表和分布式集群
数据量大就分表:减少每次查询的数据总量;并发高就分库:把并发请求分散到多个实例中去;分库分表的原理是通过一些 HASH算法 或者工具实现将一张数据表垂直或者水平进行物理切分。原创 2023-04-29 11:29:01 · 1321 阅读 · 0 评论 -
MySQL优化方案和explain详解
MySQL优化方案详解,主要包括:数据表字段设计方面、索引设计、SQL语句优化、explain后的结果分析。原创 2023-04-29 00:40:27 · 314 阅读 · 0 评论 -
MySQL底层数据结构的深入分析
MySQL的InnoDB底层使用的就是B+树,B+ 树的节点存储在磁盘上,每个节点存储 1000 多个数据,这样树的深度最多只要 4 层, 就可存储数亿的数据。如果将树的根节点缓存在内存中,则最多只需要三次磁盘访问就可以检索到需要的索引数据,效率比二叉树要高了好多个量级。聚簇索引(InnoDB):主键的叶⼦节点存储数据⾏,数据和索引是在⼀起;普通索引只存储主键值,查询其它字段需要回表。⾮聚簇索引(MyISAM):不管是主键索引还是普通索引,B+树叶⼦节点只会存储数据⾏指针,数据和索引不在⼀起。原创 2023-04-28 16:59:56 · 957 阅读 · 0 评论 -
MySQL关于索引的理解
MySQL的MyISAM和InnoDB存储引擎的索引底层实际上是一个B+TREE,具体存储底层逻辑会在后面讲。这里先说说索引的用法。1.索引的本质是数据结构,可以理解为“排好序的快速查找数据结构”,使用索引的目的是为了使查询的速度变快。2.实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占空间的。3.虽然索引大大提高了查询速度,同时确会降低更新表的速度,如对表进行INSERT、UPDATE、DELETE。4.主键与唯一索引的区别:主键不能有空值,唯一索引可以有空值。原创 2023-04-27 21:52:08 · 342 阅读 · 0 评论 -
MySQL基础用法和查询技巧
MySQL常用的一些语句速记笔记,用到的时候方便查阅。原创 2023-04-27 18:35:43 · 218 阅读 · 0 评论 -
MySQL中的内置函数
MySQL的内置系统函数原创 2023-04-25 11:47:46 · 898 阅读 · 1 评论