数据库与其所用数据结构

数据库系统的高效增删改查(CRUD)依赖于多种底层数据结构和优化机制。以下是数据库中使用的主要数据结构及其在CRUD中的关键知识点:


一、数据库核心数据结构

1. B树/B+树

用途 :索引结构(如MySQL的InnoDB索引、Oracle的索引组织表)。

特点

B+树 :叶子节点通过指针连接,支持高效范围查询和顺序扫描。

• 平衡树结构,插入/删除时通过节点分裂与合并保持平衡。

增删改查优化

查询 :通过树的高度(O(log n))快速定位数据。

插入/删除:需维护节点填充因子,避免频繁分裂。

2. 哈希表

用途 :哈希索引(如MemSQL的内存表、MySQL的Memory引擎)。

特点

• 等值查询时间复杂度 O(1)

• 冲突解决:链式哈希或开放寻址。

增删改查优化

• 适合精确匹配查询,但不支持范围查询

• 哈希表扩容时需重新哈希(rehashing),可能阻塞写入。

3. LSM树(Log-Structured Merge-Tree)

用途 :写优化存储引擎(如LevelDB、RocksDB、Cassandra)。

特点

• 数据先写入内存(MemTable),再批量刷入磁盘(SSTable)。

• 通过后台合并(Compaction)减少碎片。

增删改查优化

写入 :极高吞吐(顺序写 + 批量刷盘)。

查询:需合并内存和磁盘的多层数据,可能延迟较高。

4. 堆文件(Heap File)

用途 :存储无聚簇索引的表数据(如PostgreSQL的堆表)。

特点

• 数据无序存储,通过行指针(TID)定位。

• 支持快速插入(追加到文件末尾)。

增删改查优化

查询 :需依赖索引,否则全表扫描(O(n))。

删除:标记删除或使用空闲空间映射(Free Space Map)。

5. 倒排索引(Inverted Index)

用途 :全文搜索(如Elasticsearch、MySQL的全文索引)。

特点

• 词项到文档的映射(如 "apple" → [doc1, doc3])。

• 支持布尔查询、短语匹配等。

增删改查优化

插入/删除文档 :需更新倒排列表。

查询:通过词项合并算法(如跳表指针)加速交集/并集运算。

6. 其他数据结构

R树 :空间索引(地理数据查询)。

跳表(Skip List) :Redis的ZSET实现。

Trie树:前缀搜索(如IP路由表)。


二、做好增删改查需掌握的关键内容

1. 索引设计

聚簇索引 vs 非聚簇索引

• 聚簇索引(如InnoDB主键索引)决定数据物理存储顺序。

• 非聚簇索引(二级索引)存储主键值,需回表查询。

联合索引 :最左前缀匹配原则(如INDEX(a, b)可优化WHERE a=1 AND b=2,但无法优化WHERE b=2)。

2. 事务与并发控制

锁机制

• 行锁、间隙锁(避免幻读)、表锁。

• 死锁检测与回滚(如InnoDB的wait-for graph)。

MVCC(多版本并发控制)

• 通过版本链(Undo Log)实现读不阻塞写。

• 快照读(ReadView)保证可重复读。

3. 存储引擎优化

写优化

• LSM树的批量写入与Compaction策略。

• WAL(Write-Ahead Logging)保证持久性(如InnoDB的Redo Log)。

读优化

• 缓冲池(Buffer Pool)管理热点数据。

• 预读(Prefetch)策略减少磁盘IO。

4. 查询优化器

执行计划

• 索引选择(EXPLAIN分析)、连接顺序优化(如MySQL的JOIN优化器)。

• 统计信息:直方图(Histogram)、基数(Cardinality)估算。

代价模型:CPU、IO、内存成本的综合评估。

5. 数据分区与分片

水平分片 :按范围或哈希将数据分布到多个节点(如MySQL分库分表)。

垂直分片:按列拆分(如将大字段单独存储)。

6. 日志与恢复机制

Redo Log :崩溃后重放未刷盘的操作。

Undo Log :回滚未提交事务,实现MVCC。

Binlog:主从复制与时间点恢复。


三、实践建议

  1. 场景化选择存储引擎
    • 高并发写入 → LSM树(如RocksDB)。
    • 复杂事务 → B+树(如InnoDB)。
  2. 避免索引滥用
    • 索引会增加写入开销,需权衡查询性能与存储成本。
    • 使用覆盖索引(Covering Index)减少回表。
  3. 监控与分析工具
    • 慢查询日志(Slow Query Log)。
    • 性能模式(如performance_schema)。
  4. 学习源码与论文
    • InnoDB引擎源码(C++)、PostgreSQL文档。
    • Google的Spanner、Amazon的Aurora论文。

四、典型数据库对比

数据库 核心数据结构 适用场景
MySQL B+树(InnoDB)、哈希索引 OLTP、Web应用
PostgreSQL B树、GiST(通用搜索树) 复杂查询、GIS数据
MongoDB B树、WiredTiger的LSM树 JSON文档、灵活模式
Redis 跳表、哈希表、字典树 缓存、实时数据处理

掌握这些数据结构与机制,能帮助你设计高效的数据库方案,并针对性地优化增删改查性能。实际开发中需结合具体数据库实现细节(如参数配置、存储引擎特性)深入分析。

相关推荐
fei_sun7 分钟前
【数据结构】2025年真题
数据结构
我在人间贩卖青春10 分钟前
线性表之队列
数据结构·队列
1024小神16 分钟前
swift中 列表、字典、集合、元祖 常用的方法
数据结构·算法·swift
Java水解32 分钟前
基于Rust实现爬取 GitHub Trending 热门仓库
数据结构·后端
偶遇急雨洗心尘33 分钟前
记录一次服务器迁移时,数据库版本不一致导致sql函数报错和系统redirect重定向丢失域名问题
运维·服务器·数据库·sql
Arva .1 小时前
MySQL 的存储引擎
数据库·mysql
Luna-player1 小时前
在前端中list.map的用法
前端·数据结构·list
Logic1011 小时前
《Mysql数据库应用》 第2版 郭文明 实验5 存储过程与函数的构建与使用核心操作与思路解析
数据库·sql·mysql·学习笔记·计算机网络技术·形考作业·国家开放大学
历程里程碑1 小时前
C++ 10 模板进阶:参数特化与分离编译解析
c语言·开发语言·数据结构·c++·算法
小二·1 小时前
MyBatis基础入门《十六》企业级插件实战:基于 MyBatis Interceptor 实现 SQL 审计、慢查询监控与数据脱敏
数据库·sql·mybatis