数据库与其所用数据结构

数据库系统的高效增删改查(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 跳表、哈希表、字典树 缓存、实时数据处理

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

相关推荐
你看我名字11 小时前
Redis 高可用、持久化与故障切换:从缓存组件到云上基础设施
数据库·redis·缓存
Tairitsu_H11 小时前
[C++高阶数据结构·图论上] 最小生成树:为什么“选边”和“选点”是两条路?
数据结构·c++·图论·最小生成树
风翼靓崽12 小时前
centos7以mysql为例自建yum源
数据库·mysql·adb
码农阿豪12 小时前
MongoDB迁移到金仓数据库:商品属性继续灵活存,订单报表交给 SQL
数据库·sql·mongodb
秋饼12 小时前
Redis 全面解析:从数据结构到主从/哨兵/集群、分布式锁与面试高频考点,代码到原理一次讲透
数据库·redis·分布式·面试·后端开发
秋名RG12 小时前
一条 SQL 语句在 MySQL 中的执行过程详解
数据库·sql·mysql
Canmag 兴隆磁性12 小时前
钕铁硼磁片取向方向检测自动化方案:从人工目检到流水线在线分选的工程实践
运维·数据库·自动化·工业自动化·钕铁硼·自动化检测·磁材料
yangmu320312 小时前
安全审批与日志审计:从“谁批准”到“谁执行”的全链路闭环
数据库
R²AIN SUITE12 小时前
多云或私有云环境怎么选项目管理工具?RainSuite等5种产品的8项部署验证
服务器·网络·数据库