2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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:052827
用户头像

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

关注

评论

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

游戏数据埋点

data_y

游戏 数据埋点 游戏数据分析 埋点定义

那束漂亮的手捧花

小天同学

爱情 4月日更 幸福 传递

Go1.16 中模块的新变化

Rayjun

Go 语言

如何引入TDD实践

顿晓

TDD 4月日更

聊聊云厂商的指标监控组件

耳东@Erdong

Prometheus 4月日更 #Grafana

调整云计算资源大小时要避免的10个错误

云计算

你真的懂反馈吗?

石云升

28天写作 职场经验 管理经验 4月日更

在业务高峰期拔掉服务器电源是一种怎样的体验?

冰河

分布式 微服务 数据恢复 MySQL 高可用 异常处理

经典递归

山@支

JavaScript小笔记

赫鲁小夫

4月日更

深圳龙华携手腾讯云 加快推进区块链先行试验区建设

CECBC

聪明人的训练(九)

Changing Lin

4月日更

【得物技术】算法入门一:算法的好坏?复杂度告诉你

得物技术

算法 时间复杂度 大前端 入门 复杂度

三翼鸟的羽翼下,人诗意地栖居在智能生活里

脑极体

新的物联网技术应用有哪些

cdhqyj

互联网 物联网 通信 计算机

新华三“云屏”发布:云屏融合重塑工作体验,全力构建智“会”时代

DT极客

深入浅出 LVS 负载均衡系列(一):NAT、FULLNAT 模型原理

UCloud技术

负载均衡

线上PHP服务故障排查之路

风翱

PHP-FPM 线上事故 4月日更

spring的IOC使用以及原理

邱学喆

spring ioc 对象创建 属性注入

使用Composition API在Vue3中创建防抖搜索输入框

devpoint

vite Vue3 防抖

Android音视频 - MediaCodec编解码音视频

LoveYFan

android 音视频 编解码

一个DNS引发的“血案”

穿过生命散发芬芳

Wireshark 数据包分析 4月日更

Android音视频 - EGL源码解析以及C++实现

LoveYFan

android 音视频 OpenGL ES

翻译:《实用的Python编程》08_01_Testing

codists

Python

Redis 最后一课

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

「开源免费」基于Vue和Quasar的前端SPA项目crudapi后台管理系统实战之动态表单设计器(五)

crudapi

Vue crud 动态表单 quasar cruapi

我的 2015-2018 —— 银行软开三年项目回顾

清秋

大前端 重构 鉴权 4月日更

微服务网关:Spring Cloud Gateway —— Zuul

程序员架构进阶

微服务 网关 28天写作 4月日更

浅论结构体与联合体

Integer

c

CI/CD之基于Jenkins的发布平台实践

小江

DevOps jenkins CI/CD 发布流程

使用FFmpeg开发的那些事

Bob

音视频 ffmpeg 开源文化

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