# 列式存储

列数据库和行数据库的根本区别是如何存储数据——列数据库把不同的列存储在不同的文件中，而行数据库是按行把数据存到同一个文件中。

列式存储的优点如下：

1. 如果查询表时，只取部分字段；或者查询时按某列的值过滤，行存储需要从硬盘上加载整行到内存，效率没有按列取高
2. 列式存储把相同类型的数据归在一起，压缩比可以很高，通常能到10%\~25%。数据库的瓶颈通常在IO，很高的压缩比，可以大大减轻数据读取的压力，提高响应速度
3. 除了字符串类型，其他类型的字段通常是固定长度的，而且在磁盘和内存的字节顺序通常是一致的，可以直接映射，省去了解析的过程。而在行存储中，只要有变长的字段存在，需要逐行逐字段的解析
4. 列式存储可以向量化的处理一个字段。可以将一个列的一整块连续数据读入CPU cache，效率非常高。而且，可以利用CPU的向量化（比如对多个整型进行位移、求和、比较等，现代CPU的功能）处理指令并行处理一些常用计算，而这一切在行存储中都做不到
5. 在执行聚合计算时，可以只选择需要的列进行操作，而不需要操作整行数据，从而降低了计算的成本。因此列式存储做聚合计算会更有优势。

**参考**

[DolphinDB - 为什么列存储数据库读取速度会比传统的行数据库快](https://www.zhihu.com/question/29380943/answer/556258418)
