当前位置: 首页 > news >正文

mysql详细知识点

MySQL 基础架构

MySQL 采用分层架构,分为连接层、服务层、引擎层和存储层。

  • 连接层:处理客户端连接、认证和权限验证。
  • 服务层:解析SQL语句、优化查询、缓存结果。
  • 引擎层:插件式存储引擎(如InnoDB、MyISAM),负责数据存储和检索。
  • 存储层:数据文件、日志文件(如redo log、binlog)。

存储引擎对比

InnoDB

  • 支持事务、行级锁、外键约束。
  • 默认引擎,适用高并发写入场景。
  • 使用聚簇索引,数据文件与主键索引绑定。

MyISAM

  • 不支持事务,表级锁,读性能高。
  • 适用读多写少的场景(如数据仓库)。
  • 索引文件(.MYI)与数据文件(.MYD)分离。

索引机制

B+树索引

  • InnoDB默认索引结构,叶子节点存储数据或主键指针。
  • 适合范围查询(如 WHERE id > 100)。

哈希索引

  • 仅支持等值查询(如 WHERE id = 10),不支持排序。

全文索引

  • 用于文本搜索(如 MATCH(content) AGAINST('keyword'))。

索引优化原则

  • 遵循最左前缀匹配原则。
  • 避免对索引列使用函数或计算(如 WHERE YEAR(create_time) = 2023)。

事务与隔离级别

ACID特性

  • 原子性(Undo Log)、一致性(约束检查)、隔离性(锁/MVCC)、持久性(Redo Log)。

隔离级别

  1. 读未提交:可能读到未提交数据(脏读)。
  2. 读已提交:解决脏读,但存在不可重复读。
  3. 可重复读(MySQL默认):解决不可重复读,可能幻读。
  4. 串行化:最高隔离级别,性能最低。

锁机制

行锁

  • InnoDB通过索引实现,锁住符合条件的行。
  • 若未走索引,退化为表锁。

间隙锁(Gap Lock)

  • 在可重复读级别下防止幻读,锁定索引记录间的间隙。

死锁处理

  • 超时机制或死锁检测(innodb_deadlock_detect=ON)。

日志系统

Redo Log(重做日志)

  • 物理日志,记录页的修改,用于崩溃恢复。
  • 写入流程:先写日志(WAL),再写磁盘。

Undo Log(回滚日志)

  • 逻辑日志,记录事务前的数据版本,用于回滚和MVCC。

Binlog(归档日志)

  • 服务层日志,记录所有DDL和DML,用于主从复制和数据恢复。

性能优化

SQL优化

  • 使用 EXPLAIN 分析执行计划,关注 type(访问类型)、key(使用索引)。
  • 避免 SELECT *,减少全表扫描。

配置调优

  • 调整 innodb_buffer_pool_size(通常设为物理内存的70%-80%)。
  • 合理设置 innodb_log_file_size(减少磁盘I/O)。

分库分表

  • 水平拆分(按行分散到不同表)。
  • 垂直拆分(按列拆分到不同表)。

主从复制

原理

  1. 主库将变更写入Binlog。
  2. 从库的IO线程读取Binlog并写入Relay Log。
  3. 从库的SQL线程重放Relay Log中的事件。

复制模式

  • 异步复制(默认):主库不等待从库确认。
  • 半同步复制:至少一个从库接收日志后主库才提交。

高可用方案

MHA(Master High Availability)

  • 自动监控主库故障,提升从库为新主。

Group Replication

  • 基于Paxos协议的多主复制,保证数据一致性。

常见问题

慢查询排查

  • 开启慢查询日志(slow_query_log=ON)。
  • 使用 pt-query-digest 工具分析日志。

大表优化

  • 分区表(按范围、哈希等拆分)。
  • 归档历史数据(如按时间归档到备份表)。

以上内容涵盖MySQL的核心知识点,实际应用中需结合具体场景调整配置和优化策略。

http://www.dtcms.com/a/303433.html

相关文章:

  • python中类变量 __slots__ 解析
  • Matplotlib(三)- 图表辅助元素
  • Vue3判断对象是否为空方法
  • 飞鹤困局:增长神话的裂痕
  • 嵌软面试——通信协议
  • 7.项目起步(1)
  • 1.vue体验
  • 快速构建基于React.js的用户注册与登录的Web应用程序
  • vue element 封装表单
  • 代码随想录算法训练营第三十三天
  • 7.28PBR技术
  • Linux系统编程——数据库
  • 介绍一下static关键字
  • Sum-rate计算
  • 【代码解读】通义万相最新视频生成模型 Wan 2.2 实现解析
  • 同态滤波算法详解:基于频域变换的光照不均匀校正
  • 栈算法之【用栈实现队列】
  • 凸优化:凸函数的一些常用性质
  • OpenLayers 综合案例-量测工具
  • 【Zustand】从复杂到简洁:Zustand 状态管理简化实战指南
  • 图解系统的学习笔记--硬件结构
  • 告别繁琐 Mapper!Stream-Query 正式入驻 GitCode 平台
  • GPFS文件系统更换磁盘
  • 企业级JWT验证最佳方案:StringUtils.hasText()
  • AD中放置过孔阵列
  • Python 异常 (Exception) 深度解析
  • 如何获取我当前的IP地址
  • 掌握 ArkTS 复杂数据绑定:从双向输入到多组件状态同步
  • AWS MemoryDB 可观测最佳实践
  • Python Pandas.merge_ordered函数解析与实战教程