写点什么

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

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

关注

评论

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

【数独问题】经典面试题:解数独 ...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

DataPipeline亮相“2021科技助力湾区数字金融发展峰会”,解锁“实时数据管理”密码

DataPipeline数见科技

并发编程-原子操作CAS

赖猫

c++ 高并发 并发 CAS Linux服务器开发

融云即时通讯SDK集成 -- 国内厂商推送集成踩坑篇(Android平台)

融云 RongCloud

即时通讯

为啥你一入场就开始跌呢?聊聊长期主义

池建强

长期主义

WebRTC服务器模型

赖猫

音视频 WebRTC

Redis和Memcached的区别

赖猫

redis memcached 服务器开发 Linux服务器开发

Linux 高并发服务器 select/poll实现

赖猫

Linux linux编程 linux开发 Linux服务器开发

互联网信贷风险与大数据 存量管理

张老蔫

28天写作

写作的意义

ES_her0

28天写作 3月日更

​Web攻击怎么办?安全防护有方案

安全

读书笔记:我的安全世界观

架构精进之路

安全 #读书 3月日更

融云集成之避坑指南-Android推送篇

融云 RongCloud

音视频

嵌入式技术与人工智能有什么关系?

cdhqyj

人工智能 嵌入式 系统 科技

CodeHub#4 前情预告|H5 容器在技术实践中的应用

蚂蚁集团移动开发平台 mPaaS

html5 移动开发 codehub 教育科技

【得物技术】推荐系统是如何做排序的

得物技术

推荐 推荐系统 排序 得物技术 召回

助我拿到37KOffer,这份阿里巴巴890页Redis笔记可谓功不可没

Java架构之路

Java 程序员 架构 面试 编程语言

浅谈:国内低代码开发平台能搭建哪些企业管理系统?

优秀

低代码开发平台

优化自动化测试流程,使用 flask 开发一个 toy jenkins工具

和牛

Python 软件测试

对标阿里P7Java架构师面试题,已助我拿下字节、蚂蚁、滴滴三家Offer

Java架构之路

Java 程序员 架构 面试 编程语言

San CLI 的实现原理

百度Geek说

cli service san command

网易游戏基于 Flink 的流式 ETL 建设

Apache Flink

flink

粉丝福利 | 秒 get 支付宝同款扫码组件

蚂蚁集团移动开发平台 mPaaS

支付宝 二维码 mPaaS 扫码 QRCODE

十四五重头戏的工业互联网,为什么需要IP化先行

脑极体

OpenKruise v0.8.0 版本发布:K8s 社区首个规模化镜像预热能力

阿里巴巴云原生

容器 云原生 k8s 安全 应用服务中间件

叹服!微软自爆虐心405页程序员面试通关手册,Github上已获赞75.6K

Java架构之路

Java 程序员 架构 面试 编程语言

高质量、高并发的实时通信架构设计与探索

融云 RongCloud

架构 通信

融云即时通讯SDK集成 -- FCM推送集成指南(Android平台)

融云 RongCloud

即时通讯

融云 IM SDK 转 AndroidX

融云 RongCloud

IM

飞行汽车到底能不能普及?

石云升

思维方式 科技革命 28天写作 3月日更

跳表

一个大红包

3月日更

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