clickhouse快速入门(通过对比MYSQL)

一、行式存储和列式存储的优点缺点(从应用上)

1. . 行式存储(如 MySQL 的 InnoDB)

存储特点:整行数据连续存储(一行中的所有列紧挨着存放)。

优点:适合 “按行查询 / 修改” 场景

示例 1:查询单条完整记录

sq

-- 需求:查询ID=100的用户的所有信息(姓名、年龄、地址、电话等)
SELECT * FROM users WHERE id = 100;
  • 行式存储优势:只需一次 IO 操作就能读取整行数据(所有列连续存储),效率极高(毫秒级)。
  • 列式存储劣势:需要读取多个列的存储块并拼接,IO 次数多,效率低。

示例 2:更新单行数据

-- 需求:修改用户的手机号和地址
UPDATE users SET phone = '138xxxx', address = '北京市' WHERE id = 100;
  • 行式存储优势:行级锁只需锁定一行,修改后一次性写入整行,操作简单高效。
  • 列式存储劣势:需修改两个列的存储块,可能涉及多个锁和 IO 操作,效率低且容易引发冲突。
2. 列式存储(如 ClickHouse)

存储特点:同一列的数据连续存储(不同行的同一列紧挨着存放)。

优点:适合 “按列聚合分析” 场景

示例 3:对单列进行聚合计算

-- 需求:统计所有用户的平均年龄(只需用到age列)
SELECT AVG(age) FROM users;
  • 列式存储优势:只需读取age列的存储块,无需读取姓名、地址等无关列,IO 量极小(例如 10 亿行数据,仅需读取几十 MB 的age列数据)。
  • 行式存储劣势:需扫描全表的所有列,IO 量是列式存储的数倍甚至数十倍(例如每行有 10 列,IO 量增加 10 倍)。

示例 4:多列分组统计sql

-- 需求:按地区统计用户平均年龄和总消费金额(仅需region、age、amount列)
SELECT region, AVG(age), SUM(amount) FROM users GROUP BY region;
  • 列式存储优势:仅需读取regionageamount三列,且列数据连续存储,可高效利用 CPU 缓存进行计算,适合并行处理。
  • 行式存储劣势:需读取所有列的数据,再过滤出需要的列,大量时间浪费在无用数据的 IO 和解析上,大表查询可能耗时分钟级。
  • </
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值