写点什么

SQL Server 2011 中基于列的存储方式

  • 2011-03-14
  • 本文字数:827 字

    阅读完需:约 3 分钟

和大多数主流数据库一样,如果表拥有聚集索引,那么 SQL Server 就会以 B- 树的方式存储,否则就会使用的方式存储。这两种方法本质上都是基于行的,其中每页中行的条数会根据总体上行的大小不同而不同。从SQL Server 2011 开始,微软为我们提供了第三种选择。SQL Server 会提供一种“列存储索引”,从而以列而不是行的方式来存储数据。

当使用数据规模为1TB、记录条数为十四亿四千万的表时,微软声称基于列的查询在CPU 时间上会有16 倍的提升,而在使用时间上会有455 倍的提高。在真实情况下,这意味着本来要耗费501 秒的查询,现在只需要1.1 秒就可以完成了。这项测试是在拥有32 个逻辑处理器和256GB 内存的计算机上执行的。

微软把每个列都隔离在自身的一组页中,从而达到了这种惊人的改善。当执行查询的时候,只会从磁盘载入位于结果集中的列。而包含其它列的页会被忽略。

这种方法相当于为每种我们所能想象到的列组合创建替代索引。然而,这种方式不会消耗大量的磁盘空间,它实际上会比传统的表占用更小的空间。由于SQL Server 的压缩会发生在页级别上,并且和行相比,列中的数据更容易重复,所以使用列存储索引的表将会拥有更高的压缩等级。

但暂时我们还不能轻易决定使用列存储索引。首先也是最重要的,它们是不可更新的。一旦创建了列存储的索引,那么就不允许在表上执行插入、更新或者删除等操作了。微软期望更多商店每天对数据进行刷新,否则就需要把数据做只读处理。在刷新周期中,我们会删除索引,更新数据,然后再重新建立索引。由于这肯定是代价昂贵的操作,所以我们可以使用垂直分区来把操作限制到逻辑表的子集范围内。

使用列存储的索引也会导致性能的降低。如果你使用大多数列,那么重新组合行会耗费大量的资源。这意味着OLTP 样式的查询应该避免这种方式,而对于OLAP 形式的查询,这种方式会比较有利。或者换句话说,如果你在编写“SELECT *”或者每次抓取一行数据,那么列存储索引就不适合你。

查看英文原文: Column-based Storage in SQL Server 2011

2011-03-14 07:052495
用户头像

发布了 340 篇内容, 共 132.8 次阅读, 收获喜欢 13 次。

关注

评论

发布
暂无评论
发现更多内容

分享5个可能用得上的JavaScript 库

devpoint

JavaScript i18n

极客时间 - 运维进阶训练营 - 第一周作业

dog_brother

Docker 镜像 linux namespace

eBPF深度探索: 高效DNS监控实现

俞凡

ebpf

“程”风破浪的开发者|我的数据结构和算法学习小技巧

Albert

学习方法 算法 LeetCode “程”风破浪的开发者

2:数据库的基本操作-MySQL

Yeats_Liao

数据库 后端 10月月更

1024@程序员:图灵社区福利来了,请本人签收

图灵教育

程序员节

决胜 AI 金融新赛道!Python Quants 创始人分享宝贵 AI 算法交易经验

图灵社区

人工智能

类型转化问题

魏铁锤

10月月更

Java之面向对象

魏铁锤

10月月更

运维进阶训练营-W01H

赤色闪电

运维

栈和队列的实现

lovevivi

c 数据结构 10月月更

3:表的基本操作-MySQL

Yeats_Liao

数据库 后端 10月月更

【一Go到底】第二十三天---字符串函数详解

指剑

Go golang 10月月更

决胜AI金融新赛道!Python Quants 创始人分享宝贵 AI 算法交易经验

图灵教育

人工智能

【愚公系列】2022年10月 Go教学课程 037-面向对象综合案例-微博

愚公搬代码

10月月更

“程”风破浪的开发者|HTML知识框架整理

默默的成长

Web3.0 “程”风破浪的开发者

1:安装、连接以及配置-MySQL

Yeats_Liao

数据库 后端 10月月更

2022-10-23:给你一个整数数组 nums 。如果 nums 的一个子集中, 所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为 好子集 。 比方说,如果 nums =

福大大架构师每日一题

算法 rust 福大大

举三反一,一通百通的“数学脑”是怎样炼成的?

图灵社区

数学

1024@程序员:图灵社区福利来了,请本人签收

图灵社区

程序员节

使用Java实现BMI指数测试

魏铁锤

10月月更

Spring Boot「12」自定义 starter

Samson

Java spring 学习笔记 spring-boot 10月月更

Excel 文档的写入

芯动大师

Python Monad Excel数据分析 10月月更

【资损】资损防控的系统规范-内部接口类设计

小明Java问道之路

架构 微服务 安全 10月月更 资损

golang中的nil接收器

六月的

golang nil

举三反一,一通百通的“数学脑”是怎样炼成的?

图灵教育

数学 科普

C4D2023取消永久许可?Maya推出精简版?你不能错过的7个CG软件资讯...

Renderbus瑞云渲染农场

CG Renderbus瑞云渲染 渲染软件更新

二叉树的详细实现(含递归展开图)

lovevivi

c 数据结构 10月月更

曾国藩正面与侧面2

dfuru

【web 开发基础】PHP 快速入门(8)-PHP 运算符之逻辑运算符详解

迷彩

逻辑运算符 10月月更 web开发基础 PHP基础

“程”风破浪的开发者|Web3用合约让利润分配更公平

石云升

区块链 Web3.0 10月月更 “程”风破浪的开发者

SQL Server 2011中基于列的存储方式_.NET_Jonathan Allen_InfoQ精选文章