SQL Server误区30日谈 第6天 有关NULL位图的三个误区

这样还能减少cpu缓存命中失效的问题(点击这个链接来查看cpu的缓存是如何工作的以及MESI协议)。下面让我们来揭穿三个有关NULL位图的普遍误区。

误区 #6a:NULL位图并不是任何时候都会用到

正确 就算表中不存在允许NULL的列,NULL位图对于数据行来说会一直存在(数据行指的是堆或是聚集索引的叶子节点)。但对于索引行来说(所谓的索引行也就是聚集索引和非聚集索引的非叶子节点以及非聚集索引的叶子节点)NULL位图就不是一直有效了。 下面这条语句可以有效的证明这一点:
<div class="codetitle"><a style="CURSOR: pointer" data="15478" class="copybut" id="copybut15478" onclick="doCopy('code15478')"> 代码如下:
<div class="codebody" id="code15478">
CREATE TABLE NullTest (c1 INT NOT NULL);
CREATE NONCLUSTERED INDEX
NullTest_NC ON NullTest (c1);
GO
INSERT INTO NullTest VALUES (1);
GO
EXEC sp_allocationMetadata 'NullTest';
GO

你可以通过我的博文:<A href="http://www.sqlskills.com/blogs/paul/post/Inside-The-Storage-Engine-sp_AllocationMetadata-putting-undocumented-system-catalog-views-to-work.aspx"&gt;Inside The Storage Engine: sp_AllocationMetadata - putting undocumented system catalog views to work.来获得sp_allocationMetadata 的实现脚本。

让我们通过下面的script来分别查看在堆上的页和非聚集索引上的页:

代码如下:
DBCC TRACEON (3604);
DBCC PAGE (foo,1,152,3); -- page ID from SP output
where Index ID = 0
DBCC PAGE (foo,154,1); -- page ID from SP output
where Index ID = 2
GO

首先让我们来看堆上这页Dump出来的结果
代码如下:
Slot 0 Offset 0x60 Length 11
Record Type = PRIMARY_RECORD Record Attributes = NULL_BITMAP Memory Dump
@0x685DC060
再来看非聚集索引上的一页Dump出来的结果:
代码如下:
Slot 0,Offset 0x60,Length 13,DumpStyle BYTE
Record Type = INDEX_RECORD Record Attributes = <<<<<<<
No null bitmap Memory Dump @0x685DC060

误区 #6b: NULL位图仅仅被用于可空列


错误 当NULL位图存在时,NULL位图会给记录中的每一列对应一位,但是数据库中最小的单位是字节,所以为了向上取整到字节,NULL位图的位数可能会比列数要多。对于这个问题.我已经有一篇博文对此进行概述,请看:.

误区 #6c:给表中添加额外一列时会立即导致SQL Server对表中数据的修改

错误 只有向表中新添加的列是带默认值,且默认值不是NULL时,才会立即导致SQL Server对数据条目进行修改。总之,SQL Server存储引擎会记录一个或多个新添加的列并没有反映在数据记录中。关于这点,我有一篇博文更加深入的对此进行了阐述:
.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03