达梦数据库的一个核心设计原则:一行数据必须完整地存储在单个数据页内,不能跨页。
达梦数据库采用“一行不跨页”的设计,本质上是在 “简单与可靠” 和 “极致空间利用” 之间,选择了前者。这个决定的背后,是对存储引擎核心架构的深刻取舍。
极大简化了存储管理,提升可靠性
保证了更稳定的访问性能
简化了并发控制
这三款主流数据库对“行”的管理方式,反映了它们各自的设计哲学和针对的典型业务场景。
| 特性 | 达梦数据库 (DM) | Oracle | MySQL (InnoDB) |
|---|---|---|---|
| 核心策略 | 一行不跨页 | 允许跨页(行链接/行迁移) | 自动溢出页 |
| 根本原因 | 物理存储决定逻辑:设计极简,追求单行读写的高性能和可靠性。 | 逻辑优先于物理:理论上行可以无限大,灵活性至上。坚信复杂的软件管理可以解决硬件限制。 | 索引组织数据:表是主键索引,数据行必须紧跟其主键值存放于B+树的叶子节点上。 |
| 优点 | 1. 实现简单,存储引擎健壮可靠。 访问性能稳定,无额外I/O开销。 | 1. 灵活性极高,理论上无行大小限制。 通过复杂的块内(PCTFREE)和段级管理,空间利用率高。 |
1. 范围扫描极快,主键相邻的数据物理上大概率也相邻。2. 避免了传统堆表的数据碎片问题。 |
| 缺点 | 1. 强约束:行大小受限(页大小一半),不适用于存储超大字段。 2. 页内碎片空间难以被跨行复用。 | 1. 实现极其复杂。 2. 存在“行迁移”问题,会降低性能。 3. 需DBA精细调优(如PCTFREE)来平衡性能。 |
1. 存在“页分裂”问题,可能导致性能抖动和空间浪费。 2. 二级索引冗余大:每个二级索引都存储完整的主键值。 |
| 解决超长行 | 1. 设计阶段选大页(如32KB)。2. 启用 USING LONG ROW 将超长数据行外存储。 3. 改 TEXT 等大字段类型。 |
1. 自动处理,对应用透明。2. 使用 LONG、LOB 等大字段类型。 |
1. 使用 TEXT、BLOB 等大字段类型,数据行外存储,页内仅存指针。2. 选择更大的页大小(如果支持)。 |
简单来说:
因此,在你进行数据库选型时:
达梦社区技术 https://eco.dameng.com
文章
阅读量
获赞
