写点什么

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

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

关注

评论

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

全捐了,华为将欧拉开源操作系统代码、品牌等相关资产捐赠!!!

BeeWorks

2021最新常见200+Java面试题汇总(含答案解析),unity高级工程师面试题

Java 程序员 后端

爱奇艺基于SpringCloud的韧性能力建设

爱奇艺技术产品团队

WorkPlus移动门户开启数字化智慧办公新模式

BeeWorks

阿里内网疯狂传阅的“M8级”分布式架构笔记,GitHub刚上线就霸榜

Java 编程 程序员 架构 阿里

WeTest与腾讯安全联合推出小程序质量方案,助力私域流量2.0新增长

WeTest

从开始到放弃:某高校电子校友卡开发笔记

CC同学

2021年总结阿里、腾讯、百度等大厂11个Redis系列高频面试题,哪些你还不会

Java 程序员 后端

2021最新一线互联网大厂常见高并发面试题解析,springcloud视频百度云

Java 程序员 后端

完美诠释Netty,腾讯强推599页Netty进阶神技,惊掉我的下巴

Java 编程 程序员 Netty

Gartner:对中国央行数字货币的创新见解

BeeWorks

进击的Java(四)

ES_her0

11月日更

2021年最新基于Spring Cloud的微服务架构分析,java技术经理岗位职责

Java 程序员 后端

发布两小时,霸榜GitHub Spring Boot实战文档

Java GitHub spring 编程 程序员

万字长文手写数据库连接池,让抽象工厂不再抽象

Tom弹架构

Java 架构 设计模式

2021最新华为面经分享:Java高分面试指南(25分类1000题50w字解析)

Java 程序员 后端

不愧是GitHub上标星120K的Java手册,全程干货,只讲重点

收到请回复

Java 程序员 后端 面试技巧

数字化学习分享+一场思维探索工作坊+引导回顾会+公开演讲

研发管理Jojo

数字化转型 敏捷教练 咨询

元宇宙让我们实现“办公自由”?想要远程办公,保证员工效率和有效管理才是关键!

极狐GitLab

博睿数据APM适配欧拉开源操作系统,为开发者性能体验保驾护航

博睿数据

2021最新38道Spring大厂面试题,你碰到过哪道?,java开发工程师百度百科

Java 程序员 后端

大数据实践:数据指标中心的建设思路

大数据技术指南

11月日更

通用排序框架在爱奇艺推荐的应用

爱奇艺技术产品团队

2021最强面试笔记非它莫属:3000字Java面试核心手册(大厂必备),linux操作系统教程下载

Java 程序员 后端

2021最新出炉BAT架构实战文档:多线程与高并发+分布式+微服务,泛微网络java面试题

Java 程序员 后端

【福利】腾讯WeTest专有云,限时开放招募体验官

WeTest

今天面了个腾讯拿 38K 出来的,让我见识到了基础的天花板

Java 程序员 JVM springboot MyBatis标签

CSS页面设计稿构思与实现(四)之自定义字体

Augus

CSS 11月日更

2021年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多,我是如何收割多家大厂offer的

Java 程序员 后端

代码覆盖率VS测试覆盖率

FunTester

测试 测试覆盖率 覆盖率 FunTester 代码覆盖率

百度APP移动研发平台及DevOps实践

百度开发者中心

DevOps 最佳实践 方法论 移动端 百度app

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