随笔分类 - mysql
摘要:生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。 1、当使用唯一索引来等值查询的语句时, 如果这行数据存在,不产生间隙锁,而是记录锁。 2、当使用唯一索引来等值查询的语句时, 如果这行数据不存在,会产生间隙锁。 3、当使用唯一索引来范围查询的语句时,对于满足查询条
阅读全文
摘要:查询 唯一索引 这里我们以下面的语句为例子进行介绍:这里的card_id就是唯一索引 select * from t_user where card_id = 142733 当InnoDB引擎查询到第一条符合条件的记录时就会返回,因为唯一索引保证了字段的唯一性; 普通索引 这里我们以下面的语句为例子
阅读全文
摘要:Innodb简要架构是怎么样的? InnoDB内存结构包含哪些核心组件? (1)缓冲池(Buffer Pool):缓存数据页和索引页,加速查询操作,避免每次查询都需要进行磁盘随机IO(优化磁盘IO随机读)。 (2)写缓冲区(Change Buffer):写数据时,当数据不在缓冲池中,将数据直接写入写
阅读全文
摘要:Innodb 内存结构 Innodb的内存结构主要分为 3 个部分: Buffer Pool、Change Buffer、Adaptive HashIndex,另外还有一个(redo)log buffer。 缓冲池 Buffer Pool 首先,InnnoDB的数据都是放在磁盘上的,InnoDB操作
阅读全文
摘要:所谓两阶段提交,其实就是把 redo log 的写入拆分成了两个步骤:prepare 和 commit。 首先,存储引擎将执行更新好的新数据存到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare 状态。 然后告知执行器执行完成了,随时可以提交事务
阅读全文
摘要:多版本并发控制仅仅是一种技术概念,并没有统一的实现标准, 其的核心理念就是数据快照,不同的事务访问不同版本的数据快照,从而实现不同的事务隔离级别。 虽然字面上是说具有多个版本的数据快照,但这并不意味着数据库必须拷贝数据,保存多份数据文件,这样会浪费大量的存储空间。InnoDB通过事务的undo日志巧
阅读全文
摘要:explain工具介绍 简单翻译一下,就是explain用于获取查询执行计划(即MySQL是如何执行一个查询的)。 工作中,我们会遇到慢查询,这个时候我们就可以在select语句之前增加explain关键字,模拟MySQL优化器执行SQL语句,从而分析该SQL语句有没有用上索引、是否全表扫描、能否进
阅读全文
摘要:SQL优化 此优化方案指的是通过优化 SQL 语句以及索引来提高 MySQL 数据库的运行效率,具体内容如下: 分页优化 例如: select * from table where type = 2 and level = 9 order by id asc limit 190289,10; 优化方
阅读全文
摘要:重要的日志模块:redo log 不知道你还记不记得《孔乙己》这篇文章,酒店掌柜有一个粉板,专门用来记录客人的赊账记录。如果赊账的人不多,那么他可以把顾客名和账目写在板上。但如果赊账的人多了,粉板总会有记不下的时候,这个时候掌柜一定还有一个专门记录赊账的账本。 如果有人要赊账或者还账的话,掌柜一般有
阅读全文
摘要:如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的
阅读全文
摘要:在文章开头先抛几个问题: (1)什么时候才需要分库分表呢?我们的评判标准是什么? (2)一张表存储了多少数据的时候,才需要考虑分库分表? (3)数据增长速度很快,每天产生多少数据,才需要考虑做分库分表? 这些问题你都搞清楚了吗?相信看完这篇文章会有答案。 为什么要分库分表? 首先回答一下为什么要分库
阅读全文
摘要:一. 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 数据库分布式核心
阅读全文
摘要:数据库设计关联关系表,目的是承载"数据建模"的"数据结构"部分。 "数据建模"的第二个部分,是"数据操作"。即对存量和流量业务数据的各种业务处理和存储。 这部分早期是通过存储过程以及数据库自身的功能来约束,比如,自定义函数,存储过程等。随着程序越来越复杂,在工业界实践中,"数据操作"这部分逐渐从数据
阅读全文
摘要:正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示 “兵马未动粮草先行”,看完了相关的配置之后,我们先来创建一张测试表和一些测试数据。 -- 如果存在 person 表先删除 DROP TABLE IF EXISTS person; -- 创建 person 表,其中 us
阅读全文
摘要:二级目录映射目前前后端项目分离场景多了以后,一般是前端一个端口,后端一个端口。 如前端是https://example.com/index.html,调用的接口是https://example.com:4433 如此部署对于一些小项目未免有些麻烦,当然你在公网环境下也可以选择使用子域名、其他域名进行
阅读全文
摘要:目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。 而通常我们用的最多的就是第一范式(1NF)、第二范式(2NF)、第三范式(3NF),也就是本文要讲的“三大范式”。 第一范式(1N
阅读全文
摘要:1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和
阅读全文