自学内容网 自学内容网

MySQL 基本概念

1. MySQL 基本概念与架构

MySQL 的体系结构
  • 连接层:管理客户端连接、权限认证等。
  • 服务层:包括查询解析、查询优化、缓存等逻辑处理。
  • 存储引擎层:管理数据的存储和检索,常用的存储引擎有 InnoDB 和 MyISAM。
存储引擎
  • InnoDB:支持事务、行级锁和外键,默认存储引擎,适合高并发、事务性需求的场景。
  • MyISAM:不支持事务和行级锁,锁粒度为表级锁,适合以读操作为主的应用。

2. MySQL 索引

索引的作用
  • 索引加速数据检索,但会增加写操作的开销和存储空间。
常见索引类型
  • B+树索引:最常见的索引,适合范围查询和单键查询。
  • 哈希索引:适用于精确查找,不支持范围查询。
  • 全文索引:用于大文本字段的全文搜索。
  • 复合索引:多列组合的索引,常用于组合查询。
索引优化策略
  • 使用适当的索引:为查询中常用的字段添加索引。
  • 覆盖索引:通过索引中的列直接获取数据,无需访问表数据。
  • 避免对小表使用索引:小表中索引效果不明显,直接扫描效率更高。

3. 查询优化

EXPLAIN 和查询执行计划
  • EXPLAIN 关键字用于分析查询语句的执行计划,帮助优化查询性能。关键字段包括:
    • type:表明查询类型,如 ALL(全表扫描)、index(索引扫描)、range(范围扫描)等。
    • key:实际使用的索引。
    • rows:预计扫描的行数。
查询优化技巧
  • 避免全表扫描:通过使用索引、限制查询范围等方式避免全表扫描。
  • 优化 GROUP BYORDER 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)!