什么是列式存储?

简单说:列式存储,就是按「列」存数据,而不是按「行」存。我用最通俗、不绕弯的方式给你讲明白。


先看传统数据库:行式存储

比如一张用户表:

表格

id name age city
1 张三 20 北京
2 李四 25 上海
3 王五 30 广州

行存是这么存的:

plaintext

1,张三,20,北京 → 2,李四,25,上海 → 3,王五,30,广州

一整行数据打包存在一起

优点:

  • 一整行很快(比如查用户详情)
  • 适合频繁增删改

缺点:

  • 统计查询很慢比如你只想查 avg(age),行存也要把整行数据(id、name、city)全都读一遍,浪费 IO。

列式存储:按列存

同样的数据,列存是这样存的

plaintext

id:   1,2,3
name: 张三,李四,王五
age:  20,25,30
city: 北京,上海,广州

每一列单独存一块,同一列的数据挨在一起。


列存有什么好处?

1. 只读取需要的列

比如你执行:

sql

SELECT AVG(age) FROM user;
  • 行存:要读 id、name、age、city 全部数据
  • 列存:只读 age 这一列

数据量越大,差距越恐怖。

2. 压缩率极高

同一列数据类型相同、值很相似,压缩效果爆炸:

  • 数字、枚举、重复字符串 → 压缩比经常 1:10 甚至更高
  • 磁盘占用小,查询更快

3. 聚合、统计、分组极快

COUNT、SUM、AVG、GROUP BY 这类分析型 SQL,列存天生就是为这个设计的。


一句话总结

  • 行式存储:适合业务系统、增删改多、查单行多(MySQL)
  • 列式存储:适合大数据分析、统计报表、海量日志(ClickHouse、Hive、Doris)
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐