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


  本文标签:NULL位图

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

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

正确

就算表中不存在允许NULL的列,NULL位图对于数据行来说会一直存在(数据行指的是堆或是聚集索引的叶子节点) 。但对于索引行来说(所谓的索引行也就是聚集索引和非聚集索引的非叶子节点以及非聚集索引的叶子节点)NULL位图就不是一直有效了 。

下面这条语句可以有效的证明这一点:
复制代码 代码如下:

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

你可以通过我的博文:Inside The Storage Engine: sp_AllocationMetadata - putting undocumented system catalog views to work.来获得sp_allocationMetadata 的实现脚本 。

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