随笔分类 - MySQL
MySQL(二十一)MVCC多版本并发控制
摘要:### MySQL(二十一)MVCC多版本并发控制 #### 1 什么是MVCC - MVCC(Multiversion Concurrency Control)多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制,使得在InnoDB事务隔离级别下执行`一致性读`操作有了保障。 - 就是
MySQL(十五)分析优化器的查询计划:Trace
摘要:#### 1 MySQL(十五)分析优化器的查询计划:Trace `OPTIMIZER_TRACE`是mysql 5.6引入的一项追踪功能,它可以追踪优化器做出的各种决策(比如访问表的方法、各种开销计算和各种转换等等),并将结果记录到表`INFORMATION_SCHEMA.OPTIMIZER_
【完结撒花】MySQL(二十三)主从复制
摘要:### MySQL(二十三)主从复制 #### 1 主从复制概述 ##### 1.1 如何提高数据库并发能力 - 在实际工作中,常将`Redis`和`MySQL`配合使用,如果有请求的时候,首先在缓存中查找,如果存在就直接取出,不存在再访问数据库,这样就提升了读取的效率,减少了对后端数据库的访问压力
MySQL(二十二)其他数据库日志(一)通用查询日志和错误日志
摘要:### MySQL(二十二)其他数据库日志(一)通用查询日志和错误日志 #### 1 MySQL支持的日志 ##### 1.1 日志类型 - **慢查询日志**:记录执行时间超过`long_query_time`的所有查询,方便我们对查询进行优化 - **通用查询日志**:记录所有连接的起始和终止时
MySQL(二十二)其他数据库日志(二)bin log二进制日志与中继日志
摘要:### MySQL(二十二)其他数据库日志(二)bin log二进制日志 #### 1 bin log二进制日志 - bin log 即 binary log,二进制日志,也叫做变更日志 - 它记录所有更新数据的DDL和DML语句,但是不包含没有修改数据的语句(如Select、show等),以`事件
MySQL(二十)锁(三)乐观锁与悲观锁、显示隐式锁和其他锁
摘要:### MySQL(二十)锁(三)乐观锁与悲观锁 显式锁和隐式锁 #### 1 从对待锁的态度划分:乐观锁、悲观锁 - 从对待锁的态度划分,可以将锁划分为乐观锁和悲观锁,可以看出这两种锁是两种**对待数据并发的思维方式**。 - **乐观锁和悲观锁并不是锁,而是锁的设计思想** ##### 1.1
MySQL(二十)锁(二)表锁、行锁与页级锁
摘要:[TOC] ### MySQL(二十)锁(二)表锁、行锁与页级锁 ### 从操作粒度的锁类型划分:表级锁、行级锁和页锁 为了提高数据库的并发度,每次锁定的数据范围越小越好,理论上只锁定当前操作的数据的方案会获得最大的并发度,但是管理锁也是很耗费资源的事情(涉及锁的获取、检查和释放),因此需要在`
MySQL(十九)MySQL事务日志(二)UndoLog
摘要:### MySQL(十九)MySQL事务日志(二)UndoLog #### 1 undo 日志概述 `redo log`是事务`持久性`的保障,而`undo log`则是事务`原子性`和`一致性`的保证,如上图,在事务中更新数据的前置操作其实是需要将数据写入到 `undo log` 方便回滚。
MySQL(二十)锁(一)锁的概述与S、X锁
摘要:### MySQL(二十)锁(一)锁概述、S锁和X锁 #### 1 概述 - **`锁`是计算机协调多个线程或进程并发访问某一资源的机制**。 在程序开发过程中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤其是一些敏感的数据(如金额、订单等),就需要保证**这个数据在任何时刻都最多
MySQL(十八)MySQL事务(二):事务的隔离级别
摘要:### MySQL(十八)MySQL事务(二):事务的隔离级别 MySQL是一个`客户端/服务器`架构的软件,可以有若干个客户端与之连接,连接上之后都可以被称作是一个会话,每个客户端都可以在自己的会话中向服务器发出请求语句,一个请求语句可能是事务的一部分,**因此对于服务器来说需要同时处理多个事
MySQL(十九)MySQL事务日志(一)RedoLog
摘要:### MySQL(十九)MySQL事务日志(一)RedoLog 事务的四种特性:`原子性`、`一致性`、`持久性`和隔离性都是基于什么机制实现的? - 事务的隔离性由`锁机制`实现 - 而事务的`原子性`、`一致性`和`持久性`则由事务的 `redo` 和 `undo` 日志来实现的 - `r
MySQL(十八)MySQL事务(一):事务的概述与使用
摘要:### MySQL事务(一):事务的概述与使用 #### 1 数据库事务概述 **事务是数据库区别于文件系统的重要特性之一**,当我们有了事务就会让数据库始终保持`一致性`,同时我们还能通过事务的机制`恢复到某个时间点`,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。 ##### 1.
MySQL(十七)查询优化(二)与数据库主键设计
摘要:### 查询优化(二) #### 1 覆盖索引 ##### 什么是覆盖索引 看下面的例子,对于联合索引age_sno_name,当查询字段较少时能够使用索引,而字段较多的时候只能进行文件排序,这是由优化器判断通过**索引加回表**或者**直接文件排序**的成本来决定的。**这种一个索引包含了满足
MySQL(十七)查询优化(一)
摘要:### 查询优化(一) #### 1 关联查询优化 ##### 数据准备 ```sql CREATE TABLE `type` ( `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NULL, PRI
MySQL(十六)索引优化:索引失效的情况分析
摘要:### 索引优化 有哪些维度可以进行数据库调优? - 索引失效,没有充分利用到索引 建立索引 - 关联查询join太多(设计缺陷或不得已的需求) SQL优化 - 服务器调优及各个参数的设计(缓冲、线程池等) 调整my.cnf - 数据过多,SQL优化也到达了极限 分库分表 SQL查询优化可以分为`物
MySQL(十四)分析查询语句Explain 七千字总结
摘要:### 分析查询语句:EXPLAIN #### 1概述 **定位了查询慢的SQL之后,就可以使用EXPLAIN或者DESCRIBE工具做针对性的分析查询**。两者使用方法相同,并且分析结果也是相同的。 MySQL中有专门负责SQL语句优化的优化器模块,主要功能是计算分析系统中收集到的统计信息
MySQL(十三)MySQL性能分析工具:慢查询日志与PROFILE查询成本
摘要:#### 性能分析工具SLOW QUERY LOG、PROFILE的使用 数据库调优的目标就是`响应速度更快,吞吐量更大`。利用宏观的监控工具和微观的日志分析可以帮助我们找到调优的思路和方式。 #### :star2: 数据库调优的步骤 整个流程分为了`观察(Show Status)`和`行
MySQL(十二)索引使用的情况分析
摘要:### 索引使用的情况分析 #### 数据准备 - 创建表student_info、course ```sql CREATE TABLE `student_info` ( `id` int NOT NULL AUTO_INCREMENT, `student_id` int NOT NULL, `na
MySQL(十一)索引的分类和创建原则
摘要:### 索引的创建与设计原则 #### 1 索引的声明与使用 ##### 1.1 索引的分类 MySQL索引包括`普通索引`、`唯一性索引`、`全文索引`、`单列索引`、`多列索引`和`空间索引` - 按照逻辑结构划分,主要有四种:`普通索引`、`唯一性索引`、`主键索引`和`全文索引` - 按
MySQL(十)表空间结构:区、段与碎片区
摘要:### 表空间结构:区、段与碎片区 #### 为什么要有区? B+树中的每一层的页都会形成一个双向链表,双向链表之间的物理位置可能会离得非常远,当遇到范围查询的适用场景的时候,就会定位到最左边和最右边的记录,然后沿着双向链表一直扫描,而如果这其中的两个页面物理上离得特别远,就会成为`随机I/O`