MySQL 基本概念
1. MySQL 基本概念与架构
MySQL 的体系结构
- 连接层:管理客户端连接、权限认证等。
- 服务层:包括查询解析、查询优化、缓存等逻辑处理。
- 存储引擎层:管理数据的存储和检索,常用的存储引擎有 InnoDB 和 MyISAM。
存储引擎
- InnoDB:支持事务、行级锁和外键,默认存储引擎,适合高并发、事务性需求的场景。
- MyISAM:不支持事务和行级锁,锁粒度为表级锁,适合以读操作为主的应用。
2. MySQL 索引
索引的作用
- 索引加速数据检索,但会增加写操作的开销和存储空间。
常见索引类型
- B+树索引:最常见的索引,适合范围查询和单键查询。
- 哈希索引:适用于精确查找,不支持范围查询。
- 全文索引:用于大文本字段的全文搜索。
- 复合索引:多列组合的索引,常用于组合查询。
索引优化策略
- 使用适当的索引:为查询中常用的字段添加索引。
- 覆盖索引:通过索引中的列直接获取数据,无需访问表数据。
- 避免对小表使用索引:小表中索引效果不明显,直接扫描效率更高。
3. 查询优化
EXPLAIN 和查询执行计划
- EXPLAIN 关键字用于分析查询语句的执行计划,帮助优化查询性能。关键字段包括:
- type:表明查询类型,如
ALL
(全表扫描)、index
(索引扫描)、range
(范围扫描)等。 - key:实际使用的索引。
- rows:预计扫描的行数。
- type:表明查询类型,如
查询优化技巧
- 避免全表扫描:通过使用索引、限制查询范围等方式避免全表扫描。
- 优化
GROUP BY
和ORDER BY
:使用索引优化这些操作,减少排序和分组的开销。 - 使用
LIMIT
优化大数据量查询:限制返回的数据量,减少处理开销。 - **避免 SELECT ***:仅选择需要的列,减少不必要的数据传输。
4. 事务和锁机制
事务的四大特性(ACID)
- 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败。
- 一致性(Consistency):事务前后数据库的状态应保持一致。
- 隔离性(Isolation):事务相互隔离,不应互相影响。
- 持久性(Durability):事务一旦提交,数据就会永久保存在数据库中。
事务隔离级别
- 读未提交(Read Uncommitted):最低隔离级别,事务可以读到未提交的数据。
- 读已提交(Read Committed):只能读到已提交的数据。
- 可重复读(Repeatable Read):同一个事务中多次读取同一数据,结果一致(InnoDB 的默认隔离级别)。
- 可串行化(Serializable):最高隔离级别,完全避免脏读、幻读,但并发性差。
锁机制
- 行锁:InnoDB 支持行级锁,能够提高并发性能。
- 表锁:MyISAM 采用表级锁,写操作会阻塞其他操作。
5. 分库分表与分区
分库分表
- 水平分表:通过某个字段(如用户 ID)将数据拆分到多个表中,减小单表大小,提升查询性能。
- 垂直分表:根据字段的使用频率将表按列分割,将频繁使用的字段单独分表,减少表的宽度,提升查询效率。
分区
- 分区表:将表根据某个字段(如日期)分为多个物理区,减少单个分区的数据量,从而加快查询速度。常用的分区方式有:
- 范围分区:按范围(如时间区间)划分。
- 哈希分区:按字段的哈希值划分。
6. 高可用与容灾
主从复制
- 定义:MySQL 支持主从复制,主服务器负责写入数据,从服务器异步复制数据并用于读操作,提升读性能并增强容灾能力。
- 主从复制类型:
- 异步复制:主服务器写完数据后,不等待从服务器确认。
- 半同步复制:主服务器至少等待一个从服务器确认后再继续写操作。
主主复制:
- 定义:两个 MySQL 实例互为主从,既可以写也可以读,实现负载均衡和容灾。
读写分离
- 通过将读操作分发到从服务器,写操作保留在主服务器,减少主服务器压力。
7. MySQL 优化
数据库设计优化
- 规范化设计:遵循范式设计,减少数据冗余和更新异常。
- 反规范化:在高性能场景下,可以适当反范式化设计,减少复杂的联表查询。
查询优化
- 使用缓存:MySQL 提供查询缓存,通过缓存重复查询的结果提升性能(MySQL 8.0 后已废弃)。
- 使用连接池:避免每次查询都重新建立数据库连接,减少连接开销。
硬件优化
- SSD 存储:使用更快的磁盘,如 SSD,提升 I/O 性能。
- 增加内存:将常用数据缓存在内存中,减少磁盘 I/O 操作。
8. 常见面试题目
1. MySQL 有哪些常用的存储引擎?它们的区别是什么?
- InnoDB 和 MyISAM 是最常用的存储引擎。InnoDB 支持事务、行级锁和外键,适合高并发场景;MyISAM 适合读多写少的场景,不支持事务和行级锁。
2. 事务的 ACID 特性是什么?
- 原子性、一致性、隔离性、持久性。每个事务执行时,系统需要保证这四个特性。
3. 什么是数据库的索引?为什么要使用索引?
- 索引是一种加速查询的结构,通过快速定位数据减少查询时间。缺点是会增加写操作的开销和占用存储空间。
4. MySQL 的锁机制有哪些?
- 行级锁和表级锁。InnoDB 支持行级锁,而 MyISAM 只支持表级锁。行级锁并发性更高,表级锁则适合简单的读多写少场景。
5. 如何优化 MySQL 的查询性能?
- 使用索引、EXPLAIN 分析查询执行计划、优化复杂查询、避免使用 SELECT *、使用 LIMIT 限制结果集大小、合理分库分表等。
6. 什么是一致性哈希?在 MySQL 中如何应用?
- 一致性哈希是一种负载均衡算法,用于分布式系统中将请求映射到不同的服务器或数据库节点。在 MySQL 的分库分表和分布式缓存系统中可以应用此技术,减少节点增减带来的影响。
原文地址:https://blog.csdn.net/weixin_44965579/article/details/142832510
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!