博客
关于我
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/

你可能感兴趣的文章
mysql5.7免费下载地址
查看>>
mysql5.7命令总结
查看>>
mysql5.7安装
查看>>
mysql5.7性能调优my.ini
查看>>
MySQL5.7新增Performance Schema表
查看>>
Mysql5.7深入学习 1.MySQL 5.7 中的新增功能
查看>>
Webpack 之 basic chunk graph
查看>>
Mysql5.7版本单机版my.cnf配置文件
查看>>
mysql5.7的安装和Navicat的安装
查看>>
mysql5.7示例数据库_Linux MySQL5.7多实例数据库配置
查看>>
Mysql8 数据库安装及主从配置 | Spring Cloud 2
查看>>
mysql8 配置文件配置group 问题 sql语句group不能使用报错解决 mysql8.X版本的my.cnf配置文件 my.cnf文件 能够使用的my.cnf配置文件
查看>>
MySQL8.0.29启动报错Different lower_case_table_names settings for server (‘0‘) and data dictionary (‘1‘)
查看>>
MYSQL8.0以上忘记root密码
查看>>
Mysql8.0以上重置初始密码的方法
查看>>
mysql8.0新特性-自增变量的持久化
查看>>
Mysql8.0注意url变更写法
查看>>
Mysql8.0的特性
查看>>
MySQL8修改密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
查看>>
MySQL8修改密码的方法
查看>>