贝利信息

SQL 行存储与列存储的根本区别

日期:2026-01-19 00:00 / 作者:舞夢輝影
根本区别在于数据在磁盘上的物理组织方式:行存储以“行”为单位连续存放整条记录,列存储以“列”为单位连续存放同类型字段值;前者适用于OLTP,后者适用于OLAP;列存压缩率高、分析性能优,行存事务处理快、单行操作高效。

根本区别在于数据在磁盘上的物理组织方式:行存储以“行”为单位连续存放整条记录,列存储以“列”为单位连续存放同类型字段值。

数据排列方向不同

行存储是横向组织——每条记录的所有字段(如 user_id、name、age、city)挨着存,读一行就加载全部字段。列存储是纵向组织——所有 user_id 存一起,所有 name 存一起,所有 age 存一起,彼此物理隔离。

适用场景天然分化

行存储面向事务处理(OLTP),强调快速定位和修改单条完整记录;列存储面向分析处理(OLAP),强调高效扫描、聚合少数几列。

写入与压缩机制差异明显

行存写入是一次性落盘整行,适合高频小批量插入;列存写入需拆解为 N 次独立列写,单行更新开销大。列内数据同质,利于字典编码、RLE 等压缩,压缩率常达 5–10 倍;行内混杂类型,压缩收益有限。

索引与执行优化逻辑不同

列存天然支持位图索引、谓词下推、向量化执行——因为每列自成数据流,过滤和计算可并行推进;行存依赖 B+ 树等结构索引整行,优化重心在连接路径和事务一致性保障。