写点什么

SQL Server 2008 中的新特性——稀疏列、条件过滤索引和列集

  • 2008-09-07
  • 本文字数:1347 字

    阅读完需:约 4 分钟

Sparse Columns(稀疏列), Filtered Indexes(条件过滤索引)和 Column Sets(列集)是 SQL Server 2008 中的新特性,它们使我们可以打破 1024 个列的限制,以及有效地节省磁盘空间,但是,如果使用不当的话,它们就会成为灾难之源。

如其名称所暗示,Spare Column 就是为了解决某些列中通常情况下为 null 值的情形而设计,它节省磁盘空间的能力很是惊人,但是,我们只有在某个列符合如下条件时才能将其定义为该类型。

第一个规则就是一个需要被定义为 Sparse Column 的列必须是真正稀疏的。当值为 null 时,数据指针就完全不占用空间,就像这个列不存在一样。但如果是任何其它值,它将会比其它类型的列多占用 4 个字节的空间。这一规则对 bit 列(位列)也是有效的,在非 null 值的情况下,该列值所占用的空间将从 0.125 字节增长到 4.125 字节,据此,我们可以算出将 bit 列定义成 Sparse 列的临界值是必须要有 98% 的行值是 null。对于其它大一些的字段来说,就会更容易看到空间收益,例如,datetime 列的临界值是只要达到 52% 的行值为 null 就划算。在这些示例中的临界点我们可以看出,使用 Sparse Column 时可以节省至少 40% 的空间。SQL Server 在线图书有一个Sparse 列定义图表 ,显示了对于各种不同的列类型,在哪种情况下我们才考虑将其定义为Sparse 列。

第二个规则是,要时刻记住尽量使用Sparse 列进行索引。如果使用普通索引的话,即使你并不打算对它进行查询,它也会因为null 值浪费大量的空间。解决方案就是SQL Server 的另一个被称作“Filtered Index(条件过滤索引)”的新特性。一个过滤索引有一个where 子句用于防止对那些不满足指定条件的行进行索引。对于Sparse 列而言,这个条件显然就是where “column_name IS NOT NULL”。

Sparse 列的另一个特点就是会比普通的列要慢,所以,对于那些对 CPU 性能敏感胜过 I/O 的查询,应该考虑避免使用 Sparse 列,这是一个判断是否使用 Sparse 列的边界条件。

如果不能使用 Sparse 列的话,在普通的列上建立 Filtered Index 也是一种替代方案,它既能有效地缩小索引占用的空间,又能避开 Sparse 列的限制。如前所述,在过滤时,可以在判断该列的行值是否为空以外,增加一些其它的过滤条件。

如果你想打破 1024 个列的限制,那就必须寻求 Column Set 的帮助。Column Set 允许我们在查询时将超出 1024 以外的列捆绑到一个单独的 XML 列中。

根据 Yao Qingsong 的介绍,微软因为客户的需要保留了 1024 个列这一限制,

为了能创建多于 1024 个列,我们必须在表中定义一个 columnset 列。我们明确地提出这一点,是因为客户不能接受超过 1024 个列,而我们又不愿意让用户因这一问题无法获取数据。一旦表中定义了 columnset 列,select * 语句将会隐藏所有的 Sparse 列,代之以这个 columnset 列。但是,用户仍然可以在查询中 select 到每个独立的 sparse 列。

Column Set 列必须在表的原始设计中进行定义,如果表中已经有了任意一个 Sparse 列,就不允许再添加 Column Set 列。但是,一旦定义了 Column Set 列,新添加的 Sparse 列会被自动地添加到 Column Set 列中。

尽管 Column Set 看上去是 XML,但要尽量小心避免修改它,因为那样做的话会导致它无法再被映射到被绑定的列。

查看英文原文 Sparse Columns, Filtered Indexes, and Column Sets

2008-09-07 01:231638
用户头像

发布了 90 篇内容, 共 16.1 次阅读, 收获喜欢 11 次。

关注

评论

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

懒懒笔记 | 课代表带你梳理【RAG课程 11&12:优化和加速你的RAG】

商汤万象开发者

LLM

Swinsian 3.0 Preview 23 音乐播放器

晨光熹微

云服务器自带的防御可靠吗?

网络安全服务

防火墙 云服务器 安全组 高防IP DDoS 攻击

用友BIP开启「人+智能体+群」业务协同新模式

用友BIP

AI

指标体系建设的本质与落地逻辑——从战略到执行的闭环管理

Aloudata

数据分析 指标体系 指标管理 指标平台 指标开发

等保备案证明更新

等保测评

Xcode 26 beta (17A5241e) 发布 - Apple 平台 IDE

sysin

xcode

如何通过DNS解析实现负载均衡?有哪些优势?

国科云

鸿蒙Next仓颉语言开发实战教程:下拉刷新和上拉加载更多

幽蓝计划

当人力工作遭遇经验主义桎梏:智能体如何重塑HR战略价值?

用友BIP

Java面试题100道及答案

Geek_Yin

Java 程序员 java面试 Java面试题

AI+制造:用友BIP智能裁切,突破造纸行业效率革命

用友BIP

AI

鸿蒙Next实现瀑布流布局

飞龙AI

HarmonyOS HarmonyOS NEXT 鸿蒙影音娱乐类应用 拍摄美化

AI技术在图书管理系统的应用

北京木奇移动技术有限公司

软件外包公司 AI技术应用 图书馆信息化

破局AI落地困境,《企业AI应用落地白皮书》正式发布

用友BIP

AI

Techub News Web3小科普:什么是稳定币

TechubNews

2025年Java常见面试题

Geek_Yin

Java 程序员 java面试 Java面试题

Steinberg SpectraLayers Pro for mac 音频光谱编辑与修复

晨光熹微

Python 循环引用内存泄漏:原因分析与解决方法

异常君

Py 内存管理 循环引用 实战案例 原理解析

Steinberg Cubase Pro for mac14.0.30 多功能音乐制作

晨光熹微

商品中心—B端建品和C端缓存的技术文档

电子尖叫食人鱼

架构

跨端生态和AI赋能:移动研发模式的范式升级

xuyinyin

区块链Web3项目的开发

北京木奇移动技术有限公司

区块链开发 软件外包公司 web3开发

Steinberg HALion for mac 虚拟采样与声音合成

晨光熹微

Steinberg Dorico Pro for mac 6.0.10 乐谱编写制作

晨光熹微

算力不再是瓶颈?看DeepSeek如何颠覆AI发展逻辑

GPU算力

强化学习 算力 AI算法 深度学习、 DeepSeek

基于YOLOv8的交通标识及设施识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolov8

单据流那些事儿之手工生单串讲

inBuilder低代码平台

假如给你1亿的Redis key,如何高效统计?

不在线第一只蜗牛

数据库 redis

Steinberg Nuendo Pro for mac14.0.30 音频后期制作

晨光熹微

Java程序员100道面试题(含答案)

Geek_Yin

Java 程序员 java面试 Java面试题

SQL Server 2008中的新特性——稀疏列、条件过滤索引和列集_.NET_Jonathan Allen_InfoQ精选文章