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

B.40.5.1-数据库基础与核心原理

数据库基础与核心原理

💡 为什么需要学习数据库基础?

数据库知识的缺失,是技术成长的隐形天花板。

你是否经历过:

  • 面对复杂的数据库架构和机制,让你感到困惑和无力?
  • 事务处理出现数据不一致,找不到根本原因?
  • 数据库性能监控指标看不懂,无法判断系统健康状况?

这些困惑告诉我们:扎实的基础理论是解决复杂问题的根本保障。

🎯 学习目标

从数据库使用者到原理理解者的认知升级。

📚 学习内容

你将系统构建以下知识体系:

  • 数据库架构原理:深入理解MySQL整体架构和存储引擎机制
  • 索引工作机制:掌握B+树索引原理和优化策略
  • 事务ACID特性:精通事务隔离级别和并发控制机制
  • 性能监控基础:掌握数据库基础运维和性能分析方法

一、数据库技术概述

1.1 MySQL逻辑架构与存储引擎

MySQL逻辑架构深度解析

MySQL整体架构分为两层:

1. Server层核心组件功能:

  • 连接器:负责客户端连接管理、身份认证
  • 查询缓存:MySQL 8.0之前缓存SELECT查询结果(现已移除)
  • 分析器:词法分析(识别SQL关键字)、语法分析(检查SQL语法)
  • 优化器:选择最优执行计划,决定查询执行顺序等
  • 执行器:调用存储引擎接口执行查询,返回结果

2. 存储引擎层(插件式架构)

  • InnoDB:MySQL 5.5+默认存储引擎,支持事务、行级锁、外键
  • MyISAM:不支持事务,表级锁,适合读多写少场景
  • Memory:数据存储在内存,重启后数据丢失
  • Archive:只支持INSERT和SELECT,适合归档数据
  • CSV存储引擎:数据以CSV格式存储,适合数据交换、导入导出
InnoDB vs MyISAM 深度对比

核心特性对比表:

特性InnoDBMyISAM
事务支持✅ 支持ACID事务❌ 不支持事务
锁机制行级锁表级锁
外键支持✅ 支持外键约束❌ 不支持外键
存储限制64TB256TB
缓存机制缓冲池缓存数据和索引只缓存索引
全文索引MySQL 5.6+支持✅ 原生支持
热备份✅ 支持在线热备份❌ 需要锁表备份
MySQL存储引擎文件结构详解

InnoDB文件结构:

MySQL数据目录/
├── ibdata1              # 系统表空间文件
├── ib_logfile0          # redo log文件
├── ib_logfile1          # redo log文件
├── ibtmp1               # 临时表空间
├── mysql/               # 系统数据库
├── performance_schema/  # 性能监控数据库
└── test_db/            # 用户数据库├── table1.ibd       # 独立表空间文件├── table1.frm       # 表结构文件└── db.opt           # 数据库选项文件

InnoDB表空间管理:

  • 系统表空间(ibdata1):存储数据字典、undo log、双写缓冲区等
  • 独立表空间(.ibd文件):每个表单独的文件,便于管理和迁移
为什么选择B+树而不是其他数据结构?

B+树 vs B树 vs 红黑树 vs 哈希表对比:

数据结构查询复杂度范围查询磁盘I/O适用场景
B+树O(log n)✅ 优秀数据库索引、文件系统
B树O(log n)✅ 良好中等文件系统、数据库早期
红黑树O(log n)❌ 差内存数据结构
哈希表O(1)❌ 不支持等值查询、缓存

B+树的独特优势:

  1. 所有数据在叶子节点:非叶子节点只存储索引,可以存储更多键值
  2. 叶子节点链表连接:支持高效的范围查询和顺序扫描
  3. 更适合磁盘存储:节点大小通常设置为磁盘页大小(如16KB)
  4. 查询性能稳定:所有查询都需要从根节点到叶子节点,性能稳定

1.2 索引基础概念与原理

**索引是什么?
  • 定义:索引是数据库中对表中一列或多列的值进行排序的数据结构
    索引的通俗理解:
  • 书籍目录比喻:索引就像书的目录,不用一页页翻书就能快速找到内容

索引为什么能加速查询?

  • 减少扫描量:从"翻遍整本书"变成"查目录直接定位"
  • 有序存储:索引数据按顺序排列,支持快速查找(类似二分查找)
  • 内存优势:索引通常比表数据小,更容易放入内存快速访问

索引的代价:

  • 空间成本:就像书的目录占用了额外页码
  • 维护成本:修改数据时,目录也要同步更新
  • 选择困难:需要选择合适的列创建索引,就像选择合适的目录分类

主要索引类型详解与判断方法

1. 主键索引(Primary Key Index)

核心特征:唯一标识每一行,值必须唯一且不能为NULL
判断方法

  • ✅ 每个表通常都有且只有一个主键
  • ✅ 在MySQL InnoDB中,主键索引就是聚簇索引
  • ✅ 用于快速定位单条记录,如 WHERE id = 123
    应用场景:用户ID、订单号等唯一标识字段
2. 聚簇索引(Clustered Index)

核心特征:数据按索引顺序物理存储,一个表只能有一个
判断方法

  • ✅ 决定了数据的物理存储顺序
  • ✅ 范围查询性能极佳,如 WHERE id BETWEEN 100 AND 200
  • ✅ 在MySQL中,通常是主键索引
    比喻理解:就像按学号排序的学生座位表,找学生时直接按学号顺序查找
3. 非聚簇索引(Non-Clustered Index)

核心特征:索引与数据分离存储,可以有多个
判断方法

  • ✅ 需要二次查找(先找索引,再找数据)
  • ✅ 适合为常用查询条件创建
  • ✅ 包括普通索引、唯一索引、复合索引等
    比喻理解:就像图书馆的索引卡片,先查卡片找到书的位置,再去书架取书
4. 唯一索引(Unique Index)

核心特征:确保索引列的值唯一,但允许NULL值
判断方法

  • ✅ 用于保证数据唯一性约束
  • ✅ 性能与普通索引相当
  • ✅ 如邮箱、手机号等需要唯一性的字段
    应用场景:用户注册时的邮箱验证、手机号验证
5. 复合索引(Composite Index)

核心特征:基于多个列的索引,按列顺序组合
判断方法

  • ✅ 支持多列查询,遵循最左前缀原则
  • ✅ 如索引 (城市, 年龄, 性别) 支持:
    • WHERE 城市='北京'
    • WHERE 城市='北京' AND 年龄>25
    • WHERE 年龄>25 ❌(不满足最左前缀)
      应用场景:多条件组合查询
6. 全文索引(Full-Text Index)

核心特征:用于文本内容的搜索,支持关键词匹配
判断方法

  • ✅ 适用于大文本字段的模糊搜索
  • ✅ 支持 MATCH() AGAINST() 语法
  • ✅ 如文章内容、产品描述等文本搜索
    应用场景:搜索引擎、内容管理系统

索引选择原则

  • 优先选择:高选择性列 + 高频查询列
  • 组合索引:多条件查询时使用复合索引,注意最左前缀原则
  • 避免过度:索引不是越多越好,每个索引都有维护成本

二、事务机制与ACID特性基础

ACID实现机制基础解析

1. 原子性(Atomicity) - “全有或全无”

核心思想: 事务中的所有操作要么全部成功,要么全部失败回滚。

实现机制:undo log(回滚日志)

工作原理:

事务开始 → 记录修改前数据到undo log → 执行修改 → 成功提交/失败回滚

具体流程:

-- 转账事务示例
START TRANSACTION;-- 步骤1:记录修改前数据到undo log
-- undo log记录:账户1余额=1000,账户2余额=2000-- 步骤2:执行实际修改
UPDATE accounts SET balance = balance - 100 WHERE id = 1;  -- 账户1扣款
UPDATE accounts SET balance = balance + 100 WHERE id = 2;  -- 账户2收款-- 情况1:事务成功
COMMIT;  -- 确认修改,清理undo log-- 情况2:事务失败(如系统崩溃)
ROLLBACK;  -- 使用undo log恢复原始数据

关键要点:

  • 事务边界:明确的事务开始和结束
  • 日志先行:先写日志,后写数据
  • 回滚机制:利用undo log实现事务回滚
  • 崩溃恢复:系统崩溃后通过日志恢复数据一致性
2. 一致性(Consistency) - “数据始终有效”

核心思想: 事务执行前后,数据库必须保持一致性状态。

实现机制:约束检查 + 业务逻辑

一致性保障:

  • 数据库约束:主键、外键、唯一性、非空等约束
  • 业务规则:应用层面的数据验证逻辑
  • 触发器:数据库层面的业务规则实现

示例:

-- 银行转账的一致性要求
-- 转账前:总金额 = 账户1余额 + 账户2余额
-- 转账后:总金额 = (账户1余额-100) + (账户2余额+100) = 原总金额
-- 一致性检查:转账前后总金额保持不变
3. 隔离性(Isolation) - “事务互不干扰”

核心思想: 并发事务之间相互隔离,互不干扰。

实现机制:锁机制 + MVCC

隔离级别:

  • 读未提交(Read Uncommitted):最低隔离级别,可能读到未提交数据
  • 读已提交(Read Committed):只能读到已提交数据
  • 可重复读(Repeatable Read):MySQL默认级别,保证同一事务内多次读取结果一致
  • 串行化(Serializable):最高隔离级别,完全串行执行
4. 持久性(Durability) - “提交后永久保存”

核心思想: 事务一旦提交,对数据的修改就是永久性的。

实现机制:redo log(重做日志)

工作原理:

事务提交 → 写入redo log → 异步刷新到磁盘 → 确认提交成功

关键特性:

  • 先写日志:事务提交前先写redo log
  • 异步刷盘:数据页异步刷新到磁盘
  • 崩溃恢复:系统崩溃后通过redo log重做已提交事务

MySQL日志系统基础

三大核心日志

1. redo log(重做日志)

  • 作用:保证事务的持久性
  • 特点:物理日志,记录数据页的物理修改
  • 写入时机:事务提交时写入
  • 恢复机制:崩溃后重做已提交但未刷盘的事务

2. undo log(回滚日志)

  • 作用:保证事务的原子性
  • 特点:逻辑日志,记录数据修改前的状态
  • 写入时机:数据修改前写入
  • 恢复机制:回滚未提交的事务

3. binlog(二进制日志)

  • 作用:主从复制和数据恢复
  • 特点:逻辑日志,记录所有数据修改操作
  • 写入时机:事务提交后写入
  • 应用场景:数据备份、主从复制
日志系统协同工作

事务提交流程:

1. 准备阶段:写入undo log
2. 执行阶段:执行SQL操作
3. 提交阶段:写入redo log(prepare状态)
4. 写入binlog
5. 提交阶段:写入redo log(commit状态)
6. 清理阶段:清理undo log

崩溃恢复流程:

1. 分析阶段:扫描redo log,确定需要重做的事务
2. 重做阶段:应用redo log恢复数据
3. 回滚阶段:回滚未提交的事务
4. 完成恢复:数据库恢复到一致状态

三、锁机制与并发控制基础

3.1 MySQL锁机制基础概念

锁类型基础

1. 共享锁(Shared Lock / 读锁)

  • 定义:允许多个事务同时获取读锁,用于读取操作
  • 特性:兼容性高,多个事务可以同时持有共享锁
  • 应用场景:数据一致性读取、报表生成

2. 排他锁(Exclusive Lock / 写锁)

  • 定义:一个事务获取写锁后,其他事务不能获取任何类型的锁
  • 特性:互斥性强,会阻塞其他事务的锁请求
  • 应用场景:数据修改、数据插入

3. 意向锁(Intention Lock)

  • 定义:表级锁,表示事务准备在表中某些行上加锁
  • 作用:快速判断表级锁与行级锁的兼容性
  • 分类:意向共享锁(IS)、意向排他锁(IX)
锁粒度基础

1. 行锁(Row Lock)

  • 定义:锁定单行数据,粒度最小,并发性最高
  • 应用场景:UPDATE/DELETE操作、高并发交易系统

2. 表锁(Table Lock)

  • 定义:锁定整个表,粒度最大,并发性最低
  • 应用场景:DDL操作、全表扫描

3. 间隙锁(Gap Lock)

  • 定义:锁定索引记录之间的间隙,防止其他事务在间隙中插入数据
  • 应用场景:防止幻读、范围查询

3.2 锁表处理基础概念

锁表常见场景与排查方法

锁表常见场景:

  1. DDL操作锁表:ALTER TABLE、CREATE INDEX等
  2. 大事务锁表:长时间运行的事务持有锁
  3. 死锁:多个事务相互等待资源

锁表排查方法:

-- 查看当前锁信息
SHOW ENGINE INNODB STATUS;  -- 查看InnoDB状态
SELECT * FROM information_schema.INNODB_LOCKS;  -- 查看当前锁
SELECT * FROM information_schema.INNODB_LOCK_WAITS;  -- 查看锁等待-- 查看正在执行的SQL
SHOW PROCESSLIST;-- 杀死阻塞进程
KILL [process_id];

锁表预防措施:

  • 避免长事务:事务尽快提交
  • 使用在线DDL:MySQL 5.6+支持在线表结构变更
  • 分批次操作:大数据量操作分批次执行
  • 合理设置事务隔离级别:避免不必要的锁

3.3 事务隔离级别与并发问题深度解析

并发问题详解:

1. 脏读(Dirty Read)

  • 定义:事务A读取了事务B未提交的数据,事务B回滚后,事务A读取的数据无效
  • 场景示例
    -- 事务A:查询用户余额
    START TRANSACTION;
    SELECT balance FROM accounts WHERE user_id = 1;  -- 读取到1000元-- 事务B:修改用户余额(未提交)
    START TRANSACTION;
    UPDATE accounts SET balance = 2000 WHERE user_id = 1;-- 事务A再次查询(脏读)
    SELECT balance FROM accounts WHERE user_id = 1;  -- 读取到2000元(未提交数据)-- 事务B回滚
    ROLLBACK;-- 事务A读取的数据无效,实际余额仍为1000元
    
  • 解决方案:使用读已提交(READ COMMITTED)隔离级别

2. 不可重复读(Non-repeatable Read)

  • 定义:事务A多次读取同一数据,期间事务B修改了该数据并提交,导致事务A前后读取结果不一致
  • 场景示例
    -- 事务A:查询用户余额
    START TRANSACTION;
    SELECT balance FROM accounts WHERE user_id = 1;  -- 读取到1000元-- 事务B:修改用户余额并提交
    START TRANSACTION;
    UPDATE accounts SET balance = 2000 WHERE user_id = 1;
    COMMIT;-- 事务A再次查询(不可重复读)
    SELECT balance FROM accounts WHERE user_id = 1;  -- 读取到2000元(数据已变更)
    
  • 解决方案:使用可重复读(REPEATABLE READ)隔离级别

3. 幻读(Phantom Read)

  • 定义:事务A多次查询同一条件,期间事务B插入或删除了符合条件的数据并提交,导致事务A前后查询结果集不一致
  • 场景示例
    -- 事务A:查询余额大于500的用户
    START TRANSACTION;
    SELECT COUNT(*) FROM accounts WHERE balance > 500;  -- 返回10条记录-- 事务B:插入新用户并提交
    START TRANSACTION;
    INSERT INTO accounts (user_id, balance) VALUES (11, 1000);
    COMMIT;-- 事务A再次查询(幻读)
    SELECT COUNT(*) FROM accounts WHERE balance > 500;  -- 返回11条记录(多了一条)
    
  • 解决方案:使用串行化(SERIALIZABLE)隔离级别或MVCC+间隙锁

隔离级别对比表:

隔离级别脏读不可重复读幻读性能MySQL默认
读未提交最高
读已提交Oracle默认
可重复读
串行化最低

MySQL可重复读隔离级别的特殊处理:

  • MVCC机制:通过多版本并发控制避免不可重复读
  • 间隙锁(Gap Lock):防止幻读,锁定索引记录之间的间隙
  • Next-Key Lock:行锁+间隙锁的组合,有效防止幻读

隔离级别选择建议:

  • 读已提交:适合大多数业务场景,平衡性能和数据一致性
  • 可重复读:需要严格数据一致性的场景,如金融交易
  • 串行化:对数据一致性要求极高的场景,性能代价较大

3.4 MVCC多版本并发控制基础

MVCC核心原理

MVCC基本概念:

  • 版本链:每行数据维护多个版本,通过隐藏字段实现
  • Read View:事务启动时创建,用于判断数据可见性
  • 可见性规则:基于事务ID和版本链判断数据是否可见

MVCC优势:

  • 读不阻塞写:读取旧版本数据,不影响当前事务的写入
  • 写不阻塞读:写入新版本数据,不影响其他事务读取旧版本
  • 避免锁竞争:减少锁的使用,提高并发性能

MVCC局限性:

  • 存储开销:需要维护多个版本数据
  • 版本清理:需要定期清理过期版本
  • 写冲突:并发写入时可能产生冲突

四、数据库基础运维与管理

4.1 数据库备份与恢复基础

备份类型

1. 逻辑备份

  • 工具:mysqldump、mysqlpump
  • 特点:SQL语句形式,可读性强
  • 适用场景:小型数据库、数据迁移

2. 物理备份

  • 工具:XtraBackup、文件系统快照
  • 特点:直接复制数据文件,速度快
  • 适用场景:大型数据库、生产环境
备份策略
  • 全量备份:定期完整备份整个数据库
  • 增量备份:备份自上次备份以来的变化
  • 差异备份:备份自上次全量备份以来的变化

4.2 性能监控基础概念

监控的重要性
  • 性能评估:了解数据库运行状态和性能表现
  • 问题诊断:快速定位性能瓶颈和异常问题
  • 容量规划:为系统扩容和优化提供数据支持
基础性能指标

1. QPS(每秒查询数)

  • 定义:数据库每秒处理的查询请求数量
  • 意义:反映数据库处理能力的重要指标
  • 监控方法:通过SHOW STATUS命令查看Questions或Queries指标

2. TPS(每秒事务数)

  • 定义:数据库每秒处理的事务数量
  • 意义:衡量数据库事务处理能力
  • 监控方法:通过SHOW STATUS命令查看Com_commit和Com_rollback计算

3. 连接数

  • 定义:当前活跃的数据库连接数量
  • 意义:反映数据库并发处理能力
  • 监控方法:SHOW PROCESSLIST查看当前连接状态

4. 缓存命中率

  • 定义:缓冲池中数据命中率
  • 意义:衡量数据库缓存效率
  • 监控方法:通过SHOW STATUS计算Innodb_buffer_pool_reads和Innodb_buffer_pool_read_requests比值
性能监控基础概念

1. SHOW STATUS

  • 用途:查看数据库状态变量,获取性能指标
  • 示例
    SHOW STATUS LIKE 'Questions%';  -- 查看查询统计
    SHOW STATUS LIKE 'Innodb_buffer_pool%';  -- 查看缓冲池状态
    

2. SHOW PROCESSLIST

  • 用途:查看当前数据库连接和执行的查询
  • 示例
    SHOW PROCESSLIST;  -- 查看所有连接
    SHOW FULL PROCESSLIST;  -- 查看完整查询信息
    

3. Performance Schema

  • 用途:MySQL性能模式,提供详细的性能监控数据
  • 配置:默认启用,可通过performance_schema系统变量配置
  • 常用表
    • performance_schema.events_statements_summary_by_digest:SQL语句统计
    • performance_schema.events_waits_summary_global_by_event_name:等待事件统计

基础监控方法:

  • 系统命令:使用数据库提供的系统命令查看状态
  • 日志分析:通过分析数据库日志了解运行情况
  • 简单工具:使用基础的监控工具进行性能观察

继续学习

  • 下一篇:《B.40.5.2-SQL优化与高级查询.md》
  • 学习重点:SQL性能优化技巧、高级查询模式、执行计划分析
  • 推荐语:学会如何让查询速度提升10倍,轻松应对千万级数据场景。
http://www.dtcms.com/a/614786.html

相关文章:

  • 在razor页面上读写数据库(我的Blazor学习二)
  • sitemap怎么自动生成提交教程(sitemap新手教程)
  • 国内大型php网站建设合肥公司企业网站建设
  • 钉钉多维表格开发
  • 女的和女的做那个视频网站张掖专业做网站的公司
  • 网站建设意见征求免费注册公司怎么注册
  • 大模型语音合成确保准确性与自然的方法
  • 高清免费观看电视网站临汾做网站
  • 移动边缘计算网络中面向成本效益的联邦学习的联合类平衡客户端选择与带宽分配 论文阅读
  • nginx 日志删了还占空间,lsof + 特殊设备文件救急!
  • 机关网站建设前期准备工作中国建筑网官网查询证书
  • 上海微网站设计外链生成网站
  • 上海建网站方案网站设计的可行性分析
  • 网站换友链平台wordpress改目录域名
  • 如何正确安装Halcon机器视觉软件,免费且很快
  • 泛化能力和涌现能力
  • PAT每日三题
  • 英文自助建站好的企业管理网站
  • QT基础及对象树的认识
  • 网站白名单是什么意思免费cms建站五指
  • 找程序员做网站济南网站建设兼职
  • 二分查找算法+题目详解
  • android 15.0 Launcher3长按拖拽时,获取当前是哪一屏,获取当前多少个应用图标
  • 网页策划书 网站建设定位小白学做网站教程
  • 做电影网站需要什么手续wordpress添加统计代码
  • 12. Revit 载入族(LoadFamily)
  • 网站页面背景黑龙江专业网站建设
  • 最新网站推广哪家好辽宁网站建设的网络科技公司
  • 小说网站防盗做的好处网站放在服务器上
  • 【开题答辩实录分享】以《基于智能推荐算法的实物交换平台的设计与实现》为例进行答辩实录分享