用最通俗易懂的方式讲什么是列式存储?
·
什么是列式存储?
简单说:列式存储,就是按「列」存数据,而不是按「行」存。我用最通俗、不绕弯的方式给你讲明白。
先看传统数据库:行式存储
比如一张用户表:
表格
| 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)
更多推荐
所有评论(0)