博客
关于我
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 server has gone away
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
mysql union orderby 无效
查看>>
mysql v$session_Oracle 进程查看v$session
查看>>
mysql where中如何判断不为空
查看>>
MySQL Workbench 使用手册:从入门到精通
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>
MySQL Xtrabackup 安装、备份、恢复
查看>>
mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
查看>>
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>
MySQL —— 在CentOS9下安装MySQL
查看>>
MySQL —— 视图
查看>>
mysql 不区分大小写
查看>>