博客
关于我
MySQL 面试必备知识点
阅读量:362 次
发布时间:2019-03-04

本文共 1574 字,大约阅读时间需要 5 分钟。

MySQL 基本架构

MySQL 的基本架构分为两大层:Server 层和存储引擎层。Server 层主要负责处理连接、查询、分析、优化和执行等功能,包含连接器、查询缓存、分析器、优化器和执行器等模块。存储引擎层则负责数据的存储和读取,支持 MyISAM、InnoDB 等存储引擎,其中 InnoDB 提供了 redo log 日志模块。

SQL 语句执行流程

在处理 SQL 语句时,查询语句的执行流程包括权限校验、查询缓存、分析器、优化器、权限校验、执行器和存储引擎等环节。更新语句则需要经过分析器、权限校验、执行器和存储引擎的处理,涉及到写 undo log、存储事务 ID 和回滚指针等操作。

MySQL 存储引擎

MySQL 提供了两种主要存储引擎:MyISAM 和 InnoDB。MyISAM 是 5.5 版本之前的默认存储引擎,支持表级锁但不支持事务和外键。InnoDB 是 5.5 版本以来的默认存储引擎,支持行级锁、事务、外键和 MVCC,且具备崩溃修复能力。

事务四大特性(ACID)

ACID 包括原子性、一致性、隔离性和持久性。原子性确保事务要么全部成功要么全部失败。一致性保证事务执行前后数据保持一致。隔离性防止并发事务干扰,持久性确保提交后数据改变持久化。

如何保证 ACID

ACID 的实现依赖于 undo log、锁机制和 MVCC 等技术。undo log 记录事务的回滚日志,锁机制防止并发修改,一致性通过版本控制和读视图实现。

并发事务的问题

并发事务可能导致脏读、丢失更新、不可重复读和幻读等问题。这些问题需要通过事务控制和锁机制来避免。

四个隔离级别

MySQL 提供四种隔离级别:读取未提交、读取已提交、可重复读和串行化。每个隔离级别对应不同的并发控制机制和锁粒度。

MVCC

MVCC 是 InnoDB 用于实现并发控制的技术,通过版本链和读视图来解决读写冲突。版本链记录数据的历史版本,读视图用于判断哪些版本是当前事务可见的。

当前读和快照读

当前读读取最新版本的数据并加锁,快照读读取可见版本的数据,不加锁。快照读基于 MVCC 实现,适用于可重复读和串行化隔离级别。

索引

索引分为哈希索引和 BTree 索引。MySQL 使用 B+Tree 索引,其中 InnoDB 的索引是聚簇索引,数据文件和索引文件是同一结构。

MyISAM 和 InnoDB 对 B+Tree 索引的实现

MyISAM 的索引是非聚簇索引,主索引和辅助索引分别对应数据记录和数据文件。InnoDB 的索引是聚簇索引,数据文件本身就是索引文件。

覆盖索引

覆盖索引是一种联合索引,能够同时包含查询的所有字段,允许直接通过索引获取结果。

锁类型

锁类型包括共享锁和排他锁。共享锁允许其他事务读取,排他锁则阻止其他事务读取和修改。锁粒度分为表锁和行锁,InnoDB 支持乐观锁和悲观锁。

InnoDB 的三种锁算法

InnoDB 使用 Record lock、Gap lock 和 Next-key lock 三种锁算法来实现行锁。Next-key lock 除了锁定记录本身,還锁定其前一个记录,避免幻读。

关于 MySQL 的锁

InnoDB 的默认隔离级别是可重复读,使用 MVCC 和锁机制来避免并发问题。加锁读使用 Next-key lock 锁算法,避免幻读。

大表优化

大表优化包括限定数据范围、读写分离、垂直拆分、水平拆分和分库。这些方法能够提高查询效率和系统性能。

分库分表后如何保证 ID 唯一性

在分库分表后,可以采用 UUID、自增 ID、Redis 生成 ID 或分布式 ID 算法来保证 ID 唯一性。

Reference

本文参考了《高性能 MySQL》等权威资料,内容基于实际经验和技术文档。

转载地址:http://qger.baihongyu.com/

你可能感兴趣的文章
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>
Mysql InnoDB存储引擎 —— 数据页
查看>>
Mysql InnoDB存储引擎中的checkpoint技术
查看>>
Mysql InnoDB存储引擎中缓冲池Buffer Pool、Redo Log、Bin Log、Undo Log、Channge Buffer
查看>>
MySQL InnoDB引擎的锁机制详解
查看>>
Mysql INNODB引擎行锁的3种算法 Record Lock Next-Key Lock Grap Lock
查看>>
mysql InnoDB数据存储引擎 的B+树索引原理
查看>>
mysql innodb通过使用mvcc来实现可重复读
查看>>
mysql insert update 同时执行_MySQL进阶三板斧(三)看清“触发器 (Trigger)”的真实面目...
查看>>
mysql interval显示条件值_MySQL INTERVAL关键字可以使用哪些不同的单位值?
查看>>
Mysql join原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>
Mysql order by与limit混用陷阱
查看>>