sql-server – 表界说中列的次序是否重要?
界说表时,按次序分列逻辑组中的列和组自己是有辅佐的.表中列的逻辑次序向开拓职员通报了意义,而且是精采气魄威风凛凛的元素. 这很清晰. 然而,不清晰的是,表中列的逻辑次序是否对它们在存储层的物理排序有任何影响,可能它是否具有人们也许体谅的任何其他影响. 除了对气魄威风凛凛的影响外,列次序是否重要? 关于这一点有一个question on Stack Overflow,但它没有势力巨子的谜底. 办理要领表中列的逻辑次序是否会对存储层的物理次序发生任何影响?是.是否重要是一个我无法答复的差异题目. 与Paul Randal在anatomy of a record上常常链接的文章中描写的方法相同,让我们看一下带有DBCC IND的简朴两列表: SET STATISTICS IO OFF; SET STATISTICS TIME OFF; USE master; GO IF DATABASEPROPERTY (N'RowStructure','Version') > 0 DROP DATABASE RowStructure; GO CREATE DATABASE RowStructure; GO USE RowStructure; GO CREATE TABLE FixedLengthOrder ( c1 INT IDENTITY(1,1) PRIMARY KEY CLUSTERED,c2 CHAR(10) DEFAULT REPLICATE('A',10) NOT NULL,c3 CHAR(10) DEFAULT REPLICATE('B',10) NOT NULL ); GO INSERT FixedLengthOrder DEFAULT VALUES; GO DBCC IND ('RowStructure','FixedLengthOrder',1); GO 上面的输出表现我们必要查察第89页: DBCC TRACEON (3604); GO DBCC PAGE ('RowStructure',1,89,3); GO 在DBCC PAGE的输出中,我们看到c1在c2的’B’之前塞满了字符’A’: Memory Dump @0x000000000D25A060 0000000000000000: 10001c00 01000000 41414141 41414141 ?........AAAAAAAA 0000000000000010: 41414242 42424242 42424242 030000????AABBBBBBBBBB... 只是由于,让我们用十六进制编辑器打开RowStructure.mdf并确认’A’字符串在’B’字符串之前: 此刻一再测试可是反转字符串的次序,将’B’字符放在c1中,将’A’字符放在c2中: CREATE TABLE FixedLengthOrder ( c1 INT IDENTITY(1,c2 CHAR(10) DEFAULT REPLICATE('B',c3 CHAR(10) DEFAULT REPLICATE('A',10) NOT NULL ); GO 这次我们的DBCC PAGE输出差异,起首呈现’B’字符串: Memory Dump @0x000000000FC2A060 0000000000000000: 10001c00 01000000 42424242 42424242 ?........BBBBBBBB 0000000000000010: 42424141 41414141 41414141 030000????BBAAAAAAAAAA... 再次,只是为了咯咯笑,让我们搜查数据文件的十六进制转储: 正如Anatomy of a Record所表明的那样,记录的牢靠长度和可变长度列存储在差异的块中.逻辑交织牢靠和可变列范例与物理记录无关.可是,在每个块中,列的次序会映射到数据文件中的字节次序. CREATE TABLE FixedAndVariableColumns ( c1 INT IDENTITY(1,c3 VARCHAR(10) DEFAULT REPLICATE('B',c4 CHAR(10) DEFAULT REPLICATE('C',c5 VARCHAR(10) DEFAULT REPLICATE('D',c6 CHAR(10) DEFAULT REPLICATE('E',10) NOT NULL ); GO Memory Dump @0x000000000E07C060 0000000000000000: 30002600 01000000 41414141 41414141 ?0.&.....AAAAAAAA 0000000000000010: 41414343 43434343 43434343 45454545 ?AACCCCCCCCCCEEEE 0000000000000020: 45454545 45450600 00020039 00430042 ?EEEEEE.....9.C.B 0000000000000030: 42424242 42424242 42444444 44444444 ?BBBBBBBBBDDDDDDD 0000000000000040: 444444???????????????????????????????DDD 也可以看看: Column order doesn’t matter… generally,but – IT DEPENDS! (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |