
服务端MySQL数据库全解析
文章平均质量分 93
涵盖MySQL数据库架构、事务、索引、日志系统、主从复制等内容
祖母绿宝石
程序员
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
MySQL_01_MySQL架构和InnoDB架构
文章目录InnoDB 内存架构1、Buffer Pool2、Change Buffer3、Adaptive Hash Index4、Log BufferOperating System CacheInnoDB 磁盘架构1、表空间(Tablespaces)2、Doublewrite Buffer如果说 Change Buffer 是提升性能,那么 Doublewrite Buffer 就是保证数据页的可靠性。未完待续对于 MySQL,要记住、或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图原创 2020-09-06 10:16:43 · 895 阅读 · 1 评论 -
MySQL_02_InnoDB存储引擎默认使用B+树索引
文章目录一、前言二、从B树到B+树2.1 B树2.1.1 B树性质2.1.2 B树查找2.1.3 B树插入2.1.4 B树删除2.2 B+树(性质、插入、删除、查找、范围查找)2.3 小结三、B+树索引2.2.1 索引有哪些数据结构2.2.2 B+树数据结构的优势(哈希表、二叉树、平衡二叉树、B树、B+树)?2.2.2.1 Hash索引(两个缺点:哈希冲突和不能范围查找)2.2.2.2 二叉树做索引2.2.2.3 平衡二叉树做索引2.2.2.4 用B树做索引2.2.2.5 用B+树做索引2.2.3 附加:B原创 2021-06-12 21:50:45 · 2361 阅读 · 7 评论 -
MySQL_03_MySQL索引加快查找速度的内部原理
文章目录一、前言二、聚集索引和二级索引2.1 聚簇索引2.2 二级索引2.3回表2.4 覆盖索引三、复合索引和最左匹配原则四、面试金手指(重点003)4.1 使用索引代替全表扫描 + 复合索引列顺序 + 索引在存储引擎层4.3 五个问题一套:索引优点、索引缺点、什么列上设置索引、什么列上不设置索引、根据表的大小选择索引还是全表扫描(重点003.3)4.5 底层:三类索引(唯一索引、主键索引、聚集索引) + InnoDB架构,changebuffer与唯一索引(重点003.5)4.6 复合索引:回表、覆盖索原创 2021-06-12 22:33:44 · 1285 阅读 · 0 评论 -
MySQL_04_聪明地使用索引
文章目录一、前言二、索引优点、索引缺点、什么列上设置索引、什么列上不设置索引、根据表的大小选择索引还是全表扫描2.1 索引的五个优点2.2 解释索引三重要的优点(即上面索引的前三个优点)2.2.1 索引可以减少扫描行数2.2.2 索引优化order by,避免再次排序生成临时表2.2.3 索引可以将随机 IO 变成顺序 IO2.2 索引的三个缺点2.3 六个列上应该创建索引2.4 有些列不应该创建索引2.5 根据表的大小选择索引还是全表扫描三、高效索引设计法则3.1 避免索引失效3.1.1 公式,索引列是表原创 2021-06-13 08:36:50 · 1590 阅读 · 1 评论 -
MySQL_05_事务的ACID特性和隔离级别
文章目录一、前言二、事务的ACID特性2.1 事务2.2 理论:事务的ACID特性2.3 银行转账解释事务的ACID四特性三、事务的隔离机制(重点002)3.1 重点:隔离的对象(互斥性的数据库资源)3.2 概要:四种隔离级别和三种错误(非重点)3.3 重点:四种隔离级别与三种错误(从本质上理解,拉高逼格,隔离级别的底层实现方式就是:数据库锁的不同级别导致资源互斥粒度的不同,表级锁,行级锁,读写分离锁,不加锁)3.3.1 序列化读3.3.1.1 隔离级别-序列化读-将整个数据库作为互斥资源(底层锁:数据库原创 2021-06-19 15:58:39 · 520 阅读 · 0 评论 -
MySQL_06_事务隔离性的两种实现方式
文章目录一、前言二、MVCC 多版本并发控制三、LBCC 基于锁的并发控制3.1 从表锁到行锁3.2 四种基本锁3.2.1 读共享锁3.2.2 写独占锁3.2.3 意向读共享锁(表锁) + 意向写独占锁(表锁)3.2.4 两个行锁锁住的实际是一行记录的索引3.3 三种高级锁3.3.1 记录锁3.3.2 间隙锁3.3.3 临键锁四、尾声一、前言二、MVCC 多版本并发控制事务的目的是要实现 读一致性 ,有两种方法:加锁(基于锁的并发控制 LBCC) 和 多版本并发控制MVCC,加锁就是四种隔离级原创 2021-06-20 17:22:08 · 1800 阅读 · 1 评论 -
MySQL_07_基础SQL语句使用
一、前言照着大学的SQL server来学原创 2020-02-29 19:28:17 · 11272 阅读 · 2 评论 -
MySQL_08_在编写SQL语句层面优化速度
文章目录一、前言二、SQL优化2.1 SQL优化两个目标2.2 SQL执行的11个步骤,搞懂MySQL的语句执行顺序三、表设计3.1 表设计层面(5条)3.2 字段设计层面(5条)四、高效的SQL语句4.1 索引(索引两方向:优先使用索引,避免索引失效)4.1.1 避免索引失效4.1.2 优先使用索引4.2 单表查询 10点1、单表查询:避免索引失效,不要在 where 子句中对字段进行 null 值判断,这会进行全表扫描2、单表查询,开启慢查询日志,定位慢查询的SQL语句3、单表查询,数据库压力转移到J原创 2021-06-19 17:38:32 · 1056 阅读 · 2 评论 -
MySQL_09_主从复制/读写分离原理阐述
文章目录一、前言二、什么是主从复制?三、主从复制的原理四、主实例搭建五、从数据库实例搭建六、将主从数据库进行连接七、主从复制测试一、前言二、什么是主从复制?主从复制目的:同步数据库中的数据;主从复制过程:将主数据库的DDL和DML操作通过二进制日志binlog传到从数据库上,然后在从数据库上对这些日志进行重新执行,从而使从数据库和主数据库的数据保持一致。金手指:主从复制,复制的对象:主数据库中的DDL和DML操作三、主从复制的原理1、MySql主库在每次事务提交时会把数据变更作为事件记录在原创 2020-09-02 10:47:38 · 651 阅读 · 1 评论 -
MySQL_10_由三个日志文件构成的日志系统(binlog+undolog+redolog)
我们都知道事务有4种特性:原子性、一致性、隔离性和持久性,在事务中的操作,要么全部执行,要么全部不做,这就是事务的目的。事务的隔离性由锁机制实现,原子性、一致性和持久性由事务的redo 日志和undo 日志来保证。所以本篇文章将讨论关于事务中的redo和undo的几个问题:redo 日志与undo日志分别是什么?redo 如何保证事务的持久性?undo log 是否是redo log的逆过程...原创 2020-04-20 23:17:13 · 1870 阅读 · 1 评论 -
MySQL_11_ShardingJDBC实现分库分表
文章目录一、前言二、关系型数据库层面的高并发优化2.1 MYSQL海量数据带来的性能问题2.2 分片策略2.3 分布式ID2.3.1 定义全局表2.3.2 UUID2.3.3 雪花算法2.3 常见分库分表策略2.4 分库分表实战2.5 分库分表带来的问题三、Sharding-JDBC分库分表(uuid 雪花算法 SPI机制)四、ShardingSphere读写分离和分布式事务(理论+实战)4.1 读写分离4.2 分布式事务2.2 详解分库分表2.3 常见分库分表策略2.4 分库分表实战2.5 分库分表带来的原创 2022-02-26 14:14:00 · 2536 阅读 · 0 评论 -
MySQL_12_ShardingJDBC实现读写分离与分布式事务
文章目录五、ShardingJDBC分布式事务5.1 分布式事务5.2 强一致性的XA事务5.2.1 全局事务5.2.2 2pc提交协议5.2.3 XA事务存在的问题5.3 实践:强一致性的XA事务六、尾声五、ShardingJDBC分布式事务5.1 分布式事务事务包括两种,一个是本地事务,一个是分布式事务,而分布式事务又分为两种,强一致性的XA事务和最终一致性的柔性事务,官网 https://shardingsphere.apache.org/document/current/cn/feature原创 2022-02-27 14:54:20 · 2295 阅读 · 0 评论 -
MySQL_13_在表设计中给字段设计合适的类型
在表设计中给字段设计合适的类型原创 2020-09-02 20:40:38 · 959 阅读 · 1 评论 -
MySQL_14_用explain来定位并解决慢SQL问题
文章目录一、前言二、慢查询概要2.1 第一步,慢查询分析之前的配置2.1.1 方式一:修改my.ini2.1.2 方式二:修改数据库2.2 第二步,找到执行慢的sql语句2.3 第三步,找到原因两种方式之一,explain分析,explain各个字段的解释2.4 第四步,找到原因两种方式之一,profile分析,找到慢查询的本质原因,profile各个字段的解释2.4.1 explain制造慢sql语句,profile找到慢的sql语句2.4.2 show profile for query 具体id2.4原创 2020-09-07 20:22:04 · 907 阅读 · 1 评论 -
MySQL_15_MySQL底层SQL查询成本计算
文章目录一、前言二、select count(*) 和 select count(1)针对无 where_clause子句 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小的辅助索引查询计数,达到性能最高理论:SQL 选用索引的执行成本如何计算(全文重点,面试考点)实践:SQL 选用索引的执行成本如何计算(全文重点,面试考点)继续深入,MySQL 做全表扫描的成本有多少,SHOW TABLE STATUS LIKE 'person' 构造全表扫描optimizer_trace 工具,计算索原创 2020-09-06 11:12:35 · 888 阅读 · 1 评论 -
MySQL_16_分布式系统的CAP原则
文章目录一、CAP原则引入二、为什么三个原则不能同时满足2.1 Partition tolerance2.2 Consistency2.3 Availability2.4 Consistency 和 Availability 的矛盾三、满足两种特性的三种情况3.1 CA without P,就不再是分布式数据库了3.2 CP without A,典型的分布式数据库3.3 AP wihtout C...原创 2020-04-20 23:59:36 · 1395 阅读 · 0 评论