最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

SQLSERVER中NULL位图的作用

来源:动视网 责编:小采 时间:2020-11-09 07:52:21
文档

SQLSERVER中NULL位图的作用

SQLSERVER中NULL位图的作用:SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站: www.sqlskills.com ,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Day6-有关NULL位图的三个误区 char nchar varchar nvarchar的区别 在SQ
推荐度:
导读SQLSERVER中NULL位图的作用:SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站: www.sqlskills.com ,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Day6-有关NULL位图的三个误区 char nchar varchar nvarchar的区别 在SQ


不管数据行中是否有NULL值,建表的时候是否允许NULL,数据页中的行都会有record attributes = NULL_BITMAP

而record attributes =NULL_BITMAP VARIABLE_COLUMNS 只是说明了数据行有可变长度数据类型并且不为NULL

所以SQLSERVER在任何情况下都会去扫描这个NULL 位图的,除了Record Attributes = No null bitmap

详细可以看一下SQL Server误区30日谈-Day6-有关NULL位图的三个误区


证明

建立测试环境

 1 USE [pratice]
 2 GO
 3 
 4 
 5 --允许空,char类型
 6 CREATE TABLE testnullchar(id INT,NAME CHAR(20) NULL)
 7 GO
 8 --不允许空,varchar类型
 9 CREATE TABLE testnotnullvarchar(id INT ,NAME VARCHAR(20) NOT NULL)
10 GO
11 --不允许空,char类型
12 CREATE TABLE testnotnullchar(id INT ,NAME CHAR(20) NOT NULL)
13 GO
14 
15 INSERT INTO [dbo].[testnullchar] ( [id],[Name] )
16 SELECT 1,NULL UNION ALL
17 SELECT 2,'你'
18 GO
19 
20 INSERT INTO [dbo].[testnotnullchar] ( [id],[NAME] )
21 SELECT 1,'' UNION ALL
22 SELECT 2,'你'
23 GO
24 
25 INSERT INTO [dbo].[testnotnullvarchar] ( [id],[NAME] )
26 SELECT 1,'' UNION ALL
27 SELECT 2,'你'
28 GO
29 
30 SELECT * FROM testnullchar
31 SELECT * FROM testnotnullchar
32 SELECT * FROM testnotnullvarchar

View Code

查看数据页

 1 ------------------------------------------------------------------------
 2 --TRUNCATE TABLE DBCCResult
 3 INSERT INTO DBCCResult EXEC ('DBCC IND(pratice,testnullchar,-1) ')
 4 
 5 SELECT * FROM [dbo].[DBCCResult] ORDER BY [PageType] DESC 
 6 
 7 
 8 DBCC TRACEON(3604,-1)
 9 GO
10 DBCC PAGE([pratice],1,15658,3)
11 GO
12 
13 
14 --------------------------------------------------------
15 --TRUNCATE TABLE DBCCResult
16 INSERT INTO DBCCResult EXEC ('DBCC IND(pratice,testnotnullvarchar,-1) ')
17 
18 SELECT * FROM [dbo].[DBCCResult] ORDER BY [PageType] DESC 
19 
20 
21 DBCC TRACEON(3604,-1)
22 GO
23 DBCC PAGE([pratice],1,8353,3)
24 GO
25 
26 
27 --------------------------------------------------------
28 --TRUNCATE TABLE DBCCResult
29 INSERT INTO DBCCResult EXEC ('DBCC IND(pratice,testnotnullchar,-1) ')
30 
31 SELECT * FROM [dbo].[DBCCResult] ORDER BY [PageType] DESC 
32 
33 
34 DBCC TRACEON(3604,-1)
35 GO
36 DBCC PAGE([pratice],1,37266,3)
37 GO
38 
39 
40 
41 ----------------------------------------------------------------

View Code

testnullchar表,因为testnullchar表没有可变长度数据类型,所以两行数据都是NULL_BITMAP

testnotnullvarchar表,因为testnotnullvarchar表有可变长度数据类型,所以第二行为NULL_BITMAP VARIABLE_COLUMNS

testnotnullchar表,跟testnullchar表一样

而NULL_BITMAP VARIABLE_COLUMNS只是说明了数据行中有可变长度类型的数据,不是说某个字段就是可变长度数据类型


题外话

其实这篇文章是我前天看到某篇文章特别而写的,觉得这个null bitmap要好好研究一下,以免被人误导

本人不喜欢某些人以泰山压顶之势去评论别人,你知道的某些东西可能不一定正确的,而别人不知道的东西,日后一定会知道的,只是时间问题

知道某样东西的时间问题,迟早问题,或者这就是技术人的通病,自己技术厉害了,就XXXXXX!!!


如有不对的地方,欢迎大家拍砖o(∩_∩)o 哈哈

文档

SQLSERVER中NULL位图的作用

SQLSERVER中NULL位图的作用:SQLSERVER中NULL位图的作用 首先感谢宋沄剑提供的文章和sqlskill网站: www.sqlskills.com ,看下面文章之前请先看一下下面两篇文章 SQL Server误区30日谈-Day6-有关NULL位图的三个误区 char nchar varchar nvarchar的区别 在SQ
推荐度:
标签: 作用 sql null
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top