0

0

SQL数据库列存储原理_行存与列存对比

冷炫風刃

冷炫風刃

发布时间:2026-01-07 18:17:03

|

328人浏览过

|

来源于php中文网

原创

列存储将同一列数据连续存放,提升分析查询效率与压缩比,但写入性能较差;行存则整行存储,适合事务处理。

sql数据库列存储原理_行存与列存对比

SQL数据库里的列存储,核心是把同一列的所有值连续存放在磁盘或内存中,而不是像行存那样把整条记录(比如用户ID、姓名、年龄)捆在一起存。这种“按列组织数据”的方式,直接决定了它在分析类查询中效率高、压缩比大,但在事务写入时更吃力。

列存储是怎么组织数据的

假设一张表有三列:user_id(整型)、action(字符串)、ts(时间戳),共100万行数据:

  • 行存会把每行拼成一个单元,比如[1, "click", "2025-01-01"] → [2, "view", "2025-01-01"] → …,顺序写入磁盘块;
  • 列存则拆开存放:user_id列单独存为一串整数[1, 2, 3, ..., 1000000]action列存为字符串数组["click", "view", "buy", ...]ts列存为统一格式的时间序列——各列物理上完全分离。

这样做的直接好处是:查“所有action类型分布”,只需读action列那一段;做SUM、AVG、GROUP BY,引擎能顺序扫描同质数据,CPU缓存友好,还能用RLE、字典编码等算法高效压缩。

行存和列存的关键差异在哪

差异不在“好不好”,而在“适合什么场景”:

WOC开源网站运营管理系统1.2
WOC开源网站运营管理系统1.2

WOC是基于zend framework1.6框架所开发的一款开源简易网站运营管理系统。它允许进行网站管理、主机管理、域名管理、数据库管理、邮箱管理以及用户管理、角色管理、权限管理等一系列功能,适合中小企业进行网站运营管理。目前版本为V1.2,新版本正在开发中,同时欢迎大家参与到开发中来! WOC升级说明: 1.1在1.0的基础上进行了代码规范并增加了配置数据缓存,以提高访问速度 注意:升级时要重

下载
  • 读取逻辑不同:行存一次加载整行,适合点查(如SELECT * FROM users WHERE id = 123);列存只加载涉及的列,适合宽表扫描(如SELECT COUNT(*), AVG(age) FROM logs WHERE dt = '2026-01-04');
  • 写入机制不同:行存插入一行=一次定位+一次写入;列存需分别写入N个列块,磁头寻道/页分裂开销更大,尤其单行更新代价高;
  • 压缩能力不同:列内数据类型一致、重复模式多(比如status列大量是"success"),压缩率常达5–10倍;行存混杂不同类型字段,压缩收益有限;
  • 索引与优化倾向不同:列存天然具备“每列即索引”的特性(比如对某列建位图索引非常轻量),优化器更倾向向量化执行、谓词下推;行存依赖B+树等传统索引结构,优化重心在连接、事务一致性。

哪些SQL数据库支持列存

不是所有SQL数据库都原生支持列存,但主流系统已有明确分工或混合能力:

  • 纯列存SQL引擎:ClickHouse、Apache Doris、StarRocks、Vertica——默认按列组织,专为OLAP设计;
  • 支持列存扩展的通用数据库:PostgreSQL(通过citus或columnar插件)、SQL Server(支持聚集列存储索引)、Oracle(In-Memory Column Store选项)、PolarDB(MySQL版提供行列混合模式);
  • 典型行存为主,不默认列存:MySQL(InnoDB引擎)、PostgreSQL(默认堆表)、SQLite——它们的底层存储面向事务,列存需额外组件或升级版本实现。

选型时不用纠结“哪个更好”,而要看你主要跑的是UPDATE user SET balance = balance - 100 WHERE id = 888,还是SELECT region, SUM(sales) FROM fact_sales GROUP BY region——前者行存稳,后者列存快。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

676

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1093

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

356

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

674

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

571

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

412

2024.04.29

java学习网站推荐汇总
java学习网站推荐汇总

本专题整合了java学习网站相关内容,阅读专题下面的文章了解更多详细内容。

6

2026.01.08

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.7万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 785人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号