随笔分类 - MySQL
摘要:统计一张表的总数量,是我们开发中常有的业务需求,通常情况下,我们都是使用 SQL 语句来完成。随着业务数据的增加,你会发现这条语句执行的速度越来越慢,为什么它会变慢呢? 为什么会变慢?想要得到答案就需要知道 MySQL 是如何统计总数量的,先说一个前提吧, 的具体实现是由存储引擎实现的,也就是说不同
阅读全文
摘要:写缓存(Change Buffer) 是一种特殊的数据结构, 用于在对数据变更时,如果数据所在的数据页没有在 buffer pool 中的话,在不影响数据一致性的前提下,InnoDB 引擎会将对数据的操作缓存在 Change Buffer 中 ,这样就省去了从磁盘中读入这个数据页。 将数据页从磁盘读
阅读全文
摘要:在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回。 在 mysql 数据库中,我们知道 binlog 日志记录了我们对数据库的所有操作,所以 binlog 日志就是我们自救的利器。 接下来就来开启程序员自救之路。 想要自救成功,binlo
阅读全文
摘要:MySQL 数据库中的两阶段提交,不知道您知道不?这篇文章就简单的聊一聊 MySQL 数据库中的两阶段提交, 两阶段提交发生在数据变更期间(更新、删除、新增等),两阶段提交过程中涉及到了 MySQL 数据库中的两个日志系统:redo 日志和 binlog 文件 。 redo 日志前面已经介绍过了,就
阅读全文
摘要:在软件开发中,程序在高并发的情况下,为了保证一致性或者说安全性,我们通常都会通过加锁的方式来解决,在 MySQL 数据库中同样有这样的问题,一方面为了最大程度的利用数据库的并发访问,另一方面又需要保证每个用户能以一致的方式读取和修改数据,就引入了锁机制。 在 MySQL 数据库中,锁有很多种类型,不
阅读全文
摘要:在上一篇中,我们简单的介绍了一下 InnoDB 引擎的索引类型,这一篇我们继续学习 InnoDB 的索引,聊一聊索引策略,更好的利用好索引,提升数据库的性能,主要聊一聊覆盖索引、最左前缀原则、索引下推。 覆盖索引 覆盖索引是指在普通索引树中可以得到查询的结果,不需要在回到主键索引树中再次搜索 。 建
阅读全文
摘要:索引对数据库有多重要,我想大家都已经知道了吧,关于索引可能大家会对它多少有一些误解, 首先索引是一种数据结构,并且索引不是越多越好 。合理的索引可以提高存储引擎对数据的查询效率。 形象一点来说呢,索引跟书本的目录一样,能否快速的查找到你需要的信息,取决于你设计的目录是否合理。 MySQL 数据库有很
阅读全文
摘要:我们在 "聊一聊 MySQL 中的事务及其实现原理" 中提到了 redo 日志,redo 日志是用来保证 MySQL 持久化功能的,需要注意的是 redo 日志是 InnoDB 引擎特有的功能。 为什么 InnoDB 引擎会引入 redo 日志作为中间层来保证 MySQL 持久化,而不是直接持久化到
阅读全文
摘要:说到数据库,那就一定会聊到事务,事务也是面试中常问的问题,我们先来一个面试场景: 这可能是比较常见的面试场景了,你也许回答到了事务的四大特性,但是不一定知道他的实现原理。今天我们就来一起打卡事务的四大特性和实现原理,对于原理的实现,这篇文章只是粗略的介绍一下,更多的细节可以关注我后续的文章。 数据库
阅读全文
摘要:作为一名 Java开发人员,写 SQL 语句是常有的事,但是你知道 SQL 语句背后的处理逻辑吗?比如下面这条 SQL 语句: 执行完这条语句后,我们就会得到 id 为 1 的用户信息。那么对于这一条 SQL 语句,MySQL服务器做了哪些处理呢?这篇文章我们就一起打卡 MySQL 数据库中对 SQ
阅读全文