豢豌: http://sqler.pe.kr/web_board/view_list.asp?id=7858&read=1188&pagec=4&found=is&part=myboard4&ser=yes
蠏谿...螳 覯 企蟆 襴襯 れ~
ps : page蟲譟 蠏碁殊 蟇磯襷 轟危語 殊蟆
5 (覃伎 - 覿朱 螳 豢 )
Test蟆 : 蠍SQL-Server 2000 SP3
一危郁 ル 碁煙 伎襯 伎, 譯 伎襷 危エ覲伎.
/*---------------------------------------------------------------------
dbcc traceon(3604) : 企殊伎誤碁 蟆郁骸襯 覦
DBCC PAGE : 一危 伎 蟲譟磯ゼ 覲 覈
(覓語 讌 DBCC 覈轟 企 覈轟 ろ 覓語 MS
豈 讌讌 給. - 覦 ろ語朱襷 蠍 覦.)
DBCC PAGE ({dbid|dbname}, filenum, pagenum, print option)
dbid|dbname - 伎襯 螻 db id 企
filenum - 伎襯 螻 殊 覯
pagenum - 朱伎 伎 覯
print option - 豢レ旧
0 - 覯 る 伎 る襯 豢(吴)
1 - 覯 る, 伎 る, 螳 , ろ 企れ 豢
2 - 覯 覦 伎 る, 伎 豌, ろ 企れ 豢
3 - 覯 る, 伎 る, 螳, ろ 企れ 豢
---------------------------------------------------------------------*/
use tempdb --覈 ろ碁 tempdb
go
/*------------------------------------------------------------------------------*/
-- data page リ規譟
/*------------------------------------------------------------------------------*/
1. 螻蠍語 貉朱 蟆曙
/*------------------------------------------------------------------------------*/
Status Bits(1 byte) + 讌 (1 byte) + 貉朱れ 襯 谿場 豺(2 byte) +
1,2,...n覯讌 螻蠍語 貉殊 data + 貉朱れ (2 byte) +
null 觜碁У(n byte : 螳貉朱 1bit)
/*------------------------------------------------------------------------------*/
--drop table a
create table a (id int identity, c1 char(10))
go
insert into a values ('a')
insert into a values (null)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
0 0x0F0000000100 => 0F000000 : 伎覯, 0100 : 朱
伎覦覯 : れ 覿 2襴 伎 れ伎 覺狩.
讀, 0x0F 00 00 00 01 00 => 00 01 00 00 00 0F 企一朱 譬磯ゼ れ 覺 ,
sysindexes 企 first貉殊 蟆曙 朱(2byte) + 伎覯(4byte)襦 蟲焔 .
select convert(int, 0x0f)
-----------
15
dbcc traceon(3604)
dbcc page (tempdb, 1, 15, 1)
Slot 0, Offset 0x60
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP
19AD6060: 00120010 00000001 20202061 20202020 ........a
19AD6070: 00022020 00
伎覦覯 : 襷谿螳讌襦 れ 覿 2襴 伎 れ伎 覺狩.
蠏碁磯, 覿 覲企蟆 襷(?)...
19AD6060: 10 00 12 00 01 00 00 00 61 20 20 20 20 20 20 20
19AD6070: 20 20 02 00 00
Status Bits(1 byte) : 10
讌 (1 byte) : 00
貉朱れ 襯 谿場 豺(2 byte) : 1200 願 襷蟾 0012 願 襷蟾 ?
id貉殊 data(4 byte) : 01000000 --> 00000001 覓企 願 襷...
c1貉殊 data(10 byte) : 61202020202020202020 --> 襷襦 10 byte螻糾谿讌
貉朱れ (2 byte) : 0200
null 觜碁У(1 byte) : 00
Slot 1, Offset 0x75
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP
19AD6075: 00120010 00000002 00000000 00000000 ................
19AD6085: 00020000 02 .....
Status Bits(1 byte) : 10
讌 (1 byte) : 00
貉朱れ 襯 谿場 豺(2 byte) : 1200
id貉殊 data(4 byte) : 02000000
c1貉殊 data(10 byte) : 00000000000000000000 --> null 伎襷 襷襦 10 byte螻糾谿讌
貉朱れ (2 byte) : 0200
null 觜碁У(1 byte) : 02 => 2覯讌 貉殊 null企.
蠏碁覃, syscolumns 企 offset螻 觜蟲企慨.
select convert(varchar(10),name) name, colid, xoffset from syscolumns where id=object_id('a')
name colid xoffset
---------- ------ -------
id 1 4
c1 2 8
id貉殊 offset 4願 c1貉殊 8企. 蟆郁骸 觜蟲企慨覃
id貉殊 5byte覿 c1貉殊 9byte覿 .
sql覯 企一朱 螻蠍語 貉殊 谿場企 蟆企.
/*------------------------------------------------------------------------------*/
2. 螳覲蠍語 貉殊 蟆曙
/*------------------------------------------------------------------------------*/
Status Bits(1 byte) + 讌 (1 byte) + 貉朱れ 襯 谿場 豺(2 byte) +
1,2,...n覯讌 螻蠍語 貉殊 data + 貉朱れ (2 byte) + null 觜碁У(1 byte) +
螳覲蠍語 貉殊 (2 byte) + 1,2,...n覯讌 螳覲蠍語 貉殊 豺(2 byte) +
1,2,...n覯讌 螳覲蠍語 貉 data
/*------------------------------------------------------------------------------*/
=> 企 語 襦 ル蟆 螻蠍語 貉朱れ 朱 り
螳覲蠍語 貉朱れ る る 朱 ロ.
/*------------------------------------------------------------------------------*/
--drop table a
create table a (id int identity, c1 varchar(10), c2 char(10))
go
insert into a values ('a', 'a')
insert into a values (null,null)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
0 0x0F0000000100 => 0F000000 : 伎覯, 0100 : 朱
select convert(int, 0x0f)
-----------
15
dbcc traceon(3604)
dbcc page (tempdb, 1, 15, 1)
Slot 0, Offset 0x60
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19AD6060: 00120030 00000001 20202061 20202020 0.......a
19AD6070: 00032020 1a000100 6100 .......a
Status Bits(1 byte) : 30
讌 (1 byte) : 00
貉朱れ 襯 谿場 豺(2 byte) : 1200
id貉殊 data(4 byte) : 01000000
c2貉殊 data(10 byte) : 61202020202020202020 --> 襷襦 10 byte螻糾谿讌
貉朱れ (2 byte) : 0300
null 觜碁У(1 byte) : 00
螳覲蠍語 貉殊 (2 byte) : 0100
豌覯讌 螳覲蠍語 貉殊 豺(2 byte) : 1a00
豌覯讌 螳覲蠍語 貉 data : 61
Slot 1, Offset 0x7a
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP
19AD607A: 00120010 00000002 00000000 00000000 ................
19AD608A: 00030000 06 .....
Status Bits(1 byte) : 10
讌 (1 byte) : 00
貉朱れ 襯 谿場 豺(2 byte) : 1200
id貉殊 data(4 byte) : 02000000
c2貉殊 data(10 byte) : 00000000000000000000 --> null 伎襷 襷襦 10 byte螻糾谿讌
貉朱れ (2 byte) : 0300
null 觜碁У(1 byte) : 06 => 2覯讌, 3覯讌 貉殊 null 企.
螳覲蠍語 貉殊 (2 byte) :
豌覯讌 螳覲蠍語 貉殊 豺(2 byte) :
豌覯讌 螳覲蠍語 貉 data :
=> 螳覲蠍語 貉殊 null れ伎る 螻糾 谿讌讌 .
蠏碁覃, syscolumns 企 offset螻 觜蟲企慨.
select convert(varchar(10),name) name, colid, xoffset from syscolumns where id=object_id('a')
name colid xoffset
---------- ------ -------
id 1 4
c1 2 -1
c2 3 8
id貉殊 offset 4願 c1貉殊 -1願 c2貉殊 8企. 蟆郁骸 觜蟲企慨覃
id貉殊 5byte覿 c2貉殊 9byte覿 螻 c1貉殊 豌覯讌 螳覲蠍語 貉殊 .
蠏碁, c1 蟆曙磯 豢螳朱 豌覯讌 螳覲蠍語 貉殊 豺襯 谿場伎伎
蠏瑚崖 data襯 蟶朱 る蟆企. 螻蠍語 覲企 譟郁 覲旧″蟆 螳.
-> れ 伎 覯 讌企 蟆.
sql覯 企一朱 貉殊 谿場企 蟆企.
/*------------------------------------------------------------------------------*/
3. 企ろ 碁煙れ 蟆曙
/*------------------------------------------------------------------------------*/
Status Bits(1 byte) + 讌 (1 byte) + 貉朱れ 襯 谿場 豺(2 byte) +
1,2,...n覯讌 螻蠍語 貉殊 data + 貉朱れ (2 byte) + null 觜碁У(1 byte) +
螳覲蠍語 貉殊 (2 byte) + 1,2,...n覯讌 螳覲蠍語 貉殊 豺(2 byte) +
1,2,...n覯讌 螳覲蠍語 貉 data
/*------------------------------------------------------------------------------*/
--drop table a
create table a (id int, c1 varchar(10), c2 char(10))
create clustered index idx on a(id) --> nonunique clustered index
go
insert into a values (1, 'a', 'a')
insert into a values (1, 'b', 'b')
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100 => 1C000000 : 伎覯, 0100 : 朱
select convert(int, 0x1C)
-----------
28
dbcc traceon(3604)
dbcc page (tempdb, 1, 28, 1)
Slot 0, Offset 0x60
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19B1E060: 00120030 00000001 20202061 20202020 0.......a
19B1E070: 00032020 1b000200 61001c00 .........a
Status Bits(1 byte) : 30
讌 (1 byte) : 00
貉朱れ 襯 谿場 豺(2 byte) : 1200
id貉殊 data(4 byte) : 01000000
c2貉殊 data(10 byte) : 61202020202020202020 --> 襷襦 10 byte螻糾谿讌
貉朱れ (2 byte) : 0300
null 觜碁У(1 byte) : 00
螳覲蠍語 貉殊 (2 byte) : 0200 --> Why 2螳手 ?
nonunique clustered index 願鍵 覓語 覿譯朱 int 貉殊 豺(2 byte) : 1b00
c1 貉殊 豺(2 byte) : 1c00
nonunique clustered index 願鍵 覓語 覿譯朱 int 貉 data : --> 讌 譴覲給讌 蠍 覓
c1 貉 data : 61
Slot 1, Offset 0x7c
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19B1E07C: 00120030 00000001 20202062 20202020 0.......b
19B1E08C: 00032020 1f000200 01002000 62000000 ....... .....b
Status Bits(1 byte) : 30
讌 (1 byte) : 00
貉朱れ 襯 谿場 豺(2 byte) : 1200
id貉殊 data(4 byte) : 01000000
c2貉殊 data(10 byte) : 61202020202020202020 --> 襷襦 10 byte螻糾谿讌
貉朱れ (2 byte) : 0300
null 觜碁У(1 byte) : 00
螳覲蠍語 貉殊 (2 byte) : 0200 --> Why 2螳手 ?
nonunique clustered index 願鍵 覓語 覿譯朱 int 貉殊 豺(2 byte) : 1f00
覯讌 螳覲蠍語 貉殊 豺(2 byte) : 2000
nonunique clustered index 願鍵 覓語 覿譯朱 int 貉 data : 01000000
--> 譴覲給伎 int朱 1 豢螳蟆
--> int 螻蠍語 貉殊企 願化磯 螳覲蠍語 貉殊朱 豌襴(?)
c1 貉 data : 62
/*------------------------------------------------------------------------------*/
企ろ 碁煙るゼ 襷る 伎 レ り
襷襦 覓朱Μ朱 螳 ?
--drop table a
create table a (id int, c1 char(10))
create clustered index idx on a(id) --> nonunique clustered index
go
insert into a values (2, 'a')
insert into a values (1, 'b')
insert into a values (3, 'c')
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100 => 1C000000 : 伎覯, 0100 : 朱
select convert(int, 0x1C)
-----------
28
dbcc traceon(3604)
dbcc page (tempdb, 1, 28, 1)
DATA:
-----
Slot 0, Offset 0x75
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP
19B1E075: 00120010 00000001 20202062 20202020 ........b
19B1E085: 00022020 00 ...
Slot 1, Offset 0x60
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP
19B1E060: 00120010 00000002 20202061 20202020 ........a
19B1E070: 00022020 00 ...
Slot 2, Offset 0x8a
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP
19B1E08A: 00120010 00000003 20202063 20202020 ........c
19B1E09A: 00022020 00 ...
OFFSET TABLE:
-------------
Row - Offset
2 (0x2) - 138 (0x8a)
1 (0x1) - 96 (0x60)
0 (0x0) - 117 (0x75)
覓朱Μ 朱朱 ロ 襦 レ .
企ろ一 蟆曙磯 讌 offset table 企ろ れ襦 訖企.
蠏碁る 讌郁 れ ロ覃
delete from a where id=2
go
insert into a values (2, 'aa')
go
dbcc page (tempdb, 1, 28, 1)
DATA:
-----
Slot 0, Offset 0x75
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP
19B1E075: 00120010 00000001 20202062 20202020 ........b
19B1E085: 00022020 00 ...
Slot 1, Offset 0x9f
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19B1E09F: 00120030 00000002 20206161 20202020 0.......aa
19B1E0AF: 00022020 1d000100 00000100 00 ...........
Slot 2, Offset 0x8a
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP
19B1E08A: 00120010 00000003 20202063 20202020 ........c
19B1E09A: 00022020 00 ...
OFFSET TABLE:
-------------
Row - Offset
2 (0x2) - 138 (0x8a)
1 (0x1) - 159 (0x9f)
0 (0x0) - 117 (0x75)
data螳 襴襯 蟆 螻 るジ襴り data襯 j規 offset襷 .
覓朱, 螻伎 讌り れ kる慨覃 語螳(?) 螻糾 .
/*------------------------------------------------------------------------------*/
-- index page リ規譟
/*------------------------------------------------------------------------------*/
1. 螻蠍語 碁煙(企ろ一手化)
/*------------------------------------------------------------------------------*/
status(1)-螻蠍語企一危-覿襷伎誤(4)-覿襷id(2)-覿襷slot#(2)
- Ncol(2)-null觜碁У(1)
/*------------------------------------------------------------------------------*/
--drop table a
create table a (id int identity, c1 char(10), c2 varchar(10))
go
insert into a values ('a','1')
insert into a values (null,'2')
go
create index idx1 on a (c1)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
0 0x0F0000000100
2 0x1C0000000100
select convert(int, 0x1c)
-----------
28
dbcc traceon(3604)
dbcc page (tempdb, 1, 28, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP
19B1E060: 00000016 00000000 0f000000 01000000 ................
19B1E070: 03000100 0100 ......
--> null 手化一 碁煙 伎 螻糾 谿讌.
Slot 1, Offset 0x76
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP
19B1E076: 20206116 20202020 0f202020 01000000 .a .....
19B1E086: 03000000 0000 ......
tag(1byte) -> 16
c1貉(10byte) -> 61202020202020202020
data 伎 豺(4byte) -> 0f000000
覿襷 伎id(2byte) -> 0100
覿襷 slot#(2byte) -> 0000
Ncol(2 byte) -> 0300
null 觜碁У(1 byte) -> 00
/*------------------------------------------------------------------------------*/
2. 螳覲蠍語 碁煙(企ろ一手化)
/*------------------------------------------------------------------------------*/
status(1)-螻蠍語企一危-覿襷伎誤(4)-覿襷id(2)-覿襷slot#(2)
-Ncol(2)-null觜碁У(1)-varchar貉殊 螳(2)-1,2,...n覯讌 varchar貉殊 譬襭 誤(2)
-1,2,...n覯讌 varchar貉殊 data
/*------------------------------------------------------------------------------*/
--drop table a
create table a (id int identity, c1 char(10), c2 varchar(10))
go
insert into a values ('a','1')
insert into a values ('b',null)
go
create index idx1 on a (c2)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
0 0x0F0000000100
2 0x1C0000000100
select convert(int, 0x1c)
-----------
28
dbcc traceon(3604)
dbcc page (tempdb, 1, 28, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP
19B1E060: 00000f16 01000100 01000300 ............
tag(1byte) -> 16
data 伎 豺(4byte) -> 0f000000
覿襷 伎id(2byte) -> 0100
覿襷 slot#(2byte) -> 0100
Ncol(2 byte) -> 0300
null 觜碁У(1 byte) -> 01
--> null 手化一 碁煙 伎 覿襷 覲企 螳讌.
Slot 1, Offset 0x6c
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19B1E06C: 00000f36 00000100 00000300 00110001 6...............
19B1E07C: 31 1
tag(1byte) -> 36
data 伎 豺(4byte) -> 0f000000
覿襷 伎id(2byte) -> 0100
覿襷 slot#(2byte) -> 0000
Ncol(2 byte) -> 0300
null 觜碁У(1 byte) -> 00
varchar貉殊 螳(2byte) -> 0100
c2(豌覯讌 varchar)貉殊 譬襭 誤(2byte) -> 1100
c2(豌覯讌 varchar)貉殊 data -> 31
/*------------------------------------------------------------------------------*/
3. 螳覲蠍語+螻蠍語 碁煙(企ろ一手化)
/*------------------------------------------------------------------------------*/
status(1)-螻蠍語企一危-覿襷伎誤(4)-覿襷id(2)-覿襷slot#(2)-Ncol(2)
-null 觜碁У(1)-varchar count(2)-1,2,...n覯讌 varchar螳 豺-1,2,...n覯讌 varchar data
/*------------------------------------------------------------------------------*/
--drop table a
create table a (id int identity, c1 char(10), c2 varchar(10))
go
insert into a values ('a','1')
insert into a values (null,'2')
insert into a values ('c',null)
insert into a values (null,null)
go
create index idx1 on a (c2, c1)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
0 0x0F0000000100
2 0x1C0000000100
select convert(int, 0x1c)
-----------
28
(1螳 )
dbcc traceon(3604)
dbcc page (tempdb, 1, 28, 1)
Slot 0, Offset 0x60 --c1, c2 null
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP
19B1E060: 00000016 00000000 0f000000 01000000 ................
19B1E070: 04000300 0300 ......
tag(1byte) -> 16
c1貉(10byte) -> 00000000000000000000
data 伎 豺(4byte) -> 0f000000
覿襷 伎id(2byte) -> 0100
覿襷 slot#(2byte) -> 0300
ncol -> 0400
null 貉殊 BITMAP(1byte) -> 03
Slot 1, Offset 0x76 --c2襷 null
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP
19B1E076: 20206316 20202020 0f202020 01000000 .c .....
19B1E086: 04000200 0100 ......
tag(1byte) -> 16
c1貉(10byte) -> 63202020202020202020
data 伎 豺(4byte) -> 0f000000
覿襷 伎id(2byte) -> 0100
覿襷 slot#(2byte) -> 0200
ncol -> 0400
null 貉殊 BITMAP(1byte) -> 01
Slot 2, Offset 0x8c --c1,c2 data 蟆曙
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19B1E08C: 20206136 20202020 0f202020 01000000 6a .....
19B1E09C: 04000000 00010000 31001b ..........1
tag(1byte) -> 36
c1貉(10byte) -> 61202020202020202020
data 伎 豺(4byte) -> 0f000000
覿襷 伎id(2byte) -> 0100
覿襷 slot#(2byte) -> 0000
ncol -> 0400
null 貉殊 BITMAP(1byte) -> 00
varchar貉殊 螳(2byte) -> 0100
c2(豌覯讌 varchar)貉殊 譬襭 誤(2byte) -> 1b00
c2(豌覯讌 varchar)貉殊 data -> 31
Slot 3, Offset 0xa7 --c1襷 null
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19B1E0A7: 00000036 00000000 0f000000 01000000 6...............
19B1E0B7: 04000100 00010200 32001b ..........2
tag(1byte) -> 36
c1貉(10byte) -> 00000000000000000000
data 伎 豺(4byte) -> 0f000000
覿襷 伎id(2byte) -> 0100
覿襷 slot#(2byte) -> 0100
ncol -> 0400
null 貉殊 BITMAP(1byte) -> 02
varchar貉殊 螳(2byte) -> 0100
c2(豌覯讌 varchar)貉殊 譬襭 誤(2byte) -> 1b00
c2(豌覯讌 varchar)貉殊 data -> 32
/*------------------------------------------------------------------------------*/
-- 4. 螻蠍語 碁煙(螻蠍語 企ろ 碁煙り 蟆曙)
/*------------------------------------------------------------------------------*/
--drop table a
create table a(id int identity primary key, c1 char(10), c2 varchar(10))
go
insert into a values ('a','1')
insert into a values ('b','2')
insert into a values ('c','3')
go
create unique index idx1 on a (c1)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x1D0000000100
select convert(int, 0x1d)
-----------
29
dbcc traceon(3604)
dbcc page (tempdb, 1, 29, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP
19B20060: 20206116 20202020 01202020 02000000 .a .....
19B20070: 0000 ..
tag -> 16
c2 -> 61202020202020202020
螻蠍語 企ろ壱 -> 01000000
ncol-> 0200
null-> 00
/*------------------------------------------------------------------------------*/
-- 5. 螳覲蠍語 碁煙(螻蠍語 企ろ 碁煙り 蟆曙)
/*------------------------------------------------------------------------------*/
--drop table a
create table a(id int identity primary key, c1 char(10), c2 varchar(10))
go
insert into a values ('a','1')
insert into a values ('b','2')
insert into a values ('c','3')
go
create unique index idx1 on a (c2)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x1D0000000100
select convert(int, 0x1d)
-----------
29
dbcc traceon(3604)
dbcc page (tempdb, 1, 29, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19B20060: 00000136 00000200 000d0001 31 6...........1
tag -> 36
螻蠍語 企ろ壱 -> 01000000
ncol-> 0200
null-> 00
varcnt->0100
1st var end point->0d00
1st varchar data->31
/*------------------------------------------------------------------------------*/
-- 6. 螻蠍語 碁煙(螳覲蠍語 企ろ 碁煙り 蟆曙)
/*------------------------------------------------------------------------------*/
--drop table a
create table a(id int identity, c1 char(10), c2 varchar(10))
go
insert into a values ('a','1')
insert into a values ('b','2')
insert into a values ('c','3')
go
create clustered index idx on a(c2)
create index idx1 on a (c1)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x0F0000000100
select convert(int, 0x0f)
-----------
15
dbcc traceon(3604)
dbcc page (tempdb, 1, 15, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19AD6060: 20206136 20202020 03202020 00010000 6a .....
19AD6070: 310013 ..1
tag -> 36
螻蠍語伎碁煙れ錆 -> 61202020202020202020
ncol-> 0300
null-> 00
varcnt->0100
1st var end point->1300
螳覲蠍語 企ろ 碁煙 ->31
/*------------------------------------------------------------------------------*/
-- 7. 螳覲蠍語 碁煙(螳覲蠍語 企ろ 碁煙り 蟆曙)
/*------------------------------------------------------------------------------*/
--drop table a
create table a(id varchar(4), c1 char(10), c2 varchar(10))
go
insert into a values ('9', 'a','1')
insert into a values ('8', 'b','2')
insert into a values ('7', 'c','3')
go
create clustered index idx on a(id)
create index idx1 on a (c2)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x0F0000000100
select convert(int, 0x0f)
-----------
15
dbcc traceon(3604)
dbcc page (tempdb, 1, 15, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19AD6060: 00000336 000b0002 3931000c 6.........19
tag -> 36
ncol-> 0300
null-> 00
varcnt->0200
1st var end point->0b00
2st var end point->0c00
螳覲蠍語 碁煙 ->31
螳覲蠍語 企ろ 碁煙 ->39
/*------------------------------------------------------------------------------*/
-- 8. 螻蠍語 碁煙(螻蠍語 企ろ 碁煙り 蟆曙) - 企ろ 碁煙れ 貉殊覲旧
/*------------------------------------------------------------------------------*/
--drop table a
create table a(id int, c1 char(10), c2 varchar(10))
go
insert into a values (9, 'a','1')
insert into a values (8, 'b','2')
insert into a values (7, 'c','3')
go
create clustered index idx on a(id)
create index idx1 on a (id,c1)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x0F0000000100
select convert(int, 0x0f)
-----------
15
dbcc traceon(3604)
dbcc page (tempdb, 1, 15, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP
19AD6060: 00000716 20206300 20202020 03202020 .....c .
19AD6070: 0000 ..
tag -> 16
螻蠍語 企ろ 碁煙 ->07000000
螻蠍語 碁煙 ->63202020202020202020
ncol-> 0300
null-> 00
/*------------------------------------------------------------------------------*/
-- 9. 螳覲蠍語 碁煙(螻蠍語 企ろ 碁煙り 蟆曙) - 企ろ 碁煙れ 貉殊覲旧
/*------------------------------------------------------------------------------*/
--drop table a
create table a(id int, c1 char(10), c2 varchar(10))
go
insert into a values (9, 'a','1')
insert into a values (8, 'b','2')
insert into a values (7, 'c','3')
go
create clustered index idx on a(id)
create index idx1 on a (id,c2)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x0F0000000100
select convert(int, 0x0f)
-----------
15
dbcc traceon(3604)
dbcc page (tempdb, 1, 15, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19AD6060: 00000736 00000300 000d0001 33 6...........3
tag -> 36
螻蠍語 企ろ 碁煙 ->07000000
ncol-> 0300
null-> 00
varcnt->0100
1st var end point->0d00
varchar企ろ壱->33
/*------------------------------------------------------------------------------*/
-- 10. 螻蠍語 碁煙(螳覲蠍語 企ろ 碁煙り 蟆曙) - 企ろ 碁煙れ 貉殊覲旧
/*------------------------------------------------------------------------------*/
--drop table a
create table a(id varchar(4), c1 char(10), c2 varchar(10))
go
insert into a values ('9', 'a','1')
insert into a values ('8', 'b','2')
insert into a values ('7', 'c','3')
go
create clustered index idx on a(id)
create index idx1 on a (id,c1)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x0F0000000100
select convert(int, 0x0f)
-----------
15
dbcc traceon(3604)
dbcc page (tempdb, 1, 15, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19AD6060: 20206336 20202020 03202020 00010000 6c .....
19AD6070: 370013 ..7
tag -> 36
螻蠍語 碁煙 ->63202020202020202020
ncol-> 0300
null-> 00
varcnt->0100
1st var end point->1300
varchar企ろ壱->37
/*------------------------------------------------------------------------------*/
-- 11. 螳覲蠍語 碁煙(螳覲蠍語 企ろ 碁煙り 蟆曙) - 企ろ 碁煙れ 貉殊覲旧
/*------------------------------------------------------------------------------*/
--drop table a
create table a(id varchar(4), c1 char(10), c2 varchar(10))
go
insert into a values ('9', 'a','1')
insert into a values ('8', 'b','2')
insert into a values ('7', 'c','3')
go
create clustered index idx on a(id)
create index idx1 on a (id,c2)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x0F0000000100
select convert(int, 0x0f)
-----------
15
dbcc traceon(3604)
dbcc page (tempdb, 1, 15, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19AD6060: 00000336 000b0002 3337000c 6.........73
tag -> 36
ncol-> 0300
null-> 00
varcnt->0200
1st var end point->0b00
1st var end point->0c00
id data->37
c2 data->33
/*------------------------------------------------------------------------------*/
-- 12. 螳覲蠍語+螻蠍語 碁煙(螳覲蠍語+螻蠍語 企ろ 碁煙り 蟆曙)
/*------------------------------------------------------------------------------*/
--drop table a
create table a
(id varchar(4), c1 char(10), c2 varchar(10), c3 char(10), primary key(id,c1))
go
insert into a values ('9', 'a','1','e')
insert into a values ('8', 'b','2','f')
insert into a values ('7', 'c','3','g')
go
create index idx1 on a (c2,c3)
go
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
1 0x1C0000000100
2 0x1D0000000100
select convert(int, 0x1d)
-----------
29
dbcc traceon(3604)
dbcc page (tempdb, 1, 29, 1)
Slot 0, Offset 0x60
-------------------
Record Type = INDEX_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19B20060: 20206536 20202020 61202020 20202020 6e a
19B20070: 20202020 00000420 001f0002 39310020 ....... .19
tag -> 36
螻蠍語伎碁煙ろ->65202020202020202020
螻蠍語危企ろ壱->61202020202020202020
ncol-> 0400
null-> 00
varcnt->0200
1st var end point->1f00
2nd var end point->2000
varchar碁煙ろ->31
varchar企ろ壱->39
/*------------------------------------------------------------------------------*/
-- 覿襦 : data type覲 リ規譟
/*------------------------------------------------------------------------------*/
char, varchar, int, datetime, smalldatetime, decimal, float, tinyint, bit 蟲譟磯ゼ 覲伎.
--drop table a
create table a(c1 char(4), c2 varchar(4), c3 int, c4 datetime,
c5 smalldatetime, c6 decimal(10,2), c7 float,
c8 tinyint, c9 bit)
go
insert into a values ('ab', 'ab', 3, getdate(), getdate(), 6.0, 7.0, 8, 1)
go
select * from a
c1 c2 c3 c4 c5 c6 c7 c8 c9
---- ---- ----- ------------------------- ---------------------- ------- ------- ---- ----
ab ab 3 2003-03-31 14:12:20.200 2003-03-31 14:12:00 6.00 7.0 8 1
select convert(varchar(10),name) name, colid, xoffset, length from syscolumns where id=object_id('a')
name colid xoffset length
---------- ------ ------- ------
c1 1 4 4
c2 2 -1 4
c3 3 8 4
c4 4 12 8
c5 5 20 4
c6 6 24 9
c7 7 33 8
c8 8 41 1
c9 9 42 1
select indid, first from sysindexes where id=object_id('a')
indid first
------ --------------
0 0x1C0000000100
select convert(int, 0x1C)
-----------
28
dbcc traceon(3604)
dbcc page (tempdb, 1, 28, 1)
Slot 0, Offset 0x60
-------------------
Record Type = PRIMARY_RECORD
Record Attributes = NULL_BITMAP VARIABLE_COLUMNS
19EBC060: 002b0030 20206261 00000003 00ea19ec 0.+.ab ........
19EBC070: 0000934d 934d0354 00025801 00000000 M...T.M..X......
19EBC080: 00000000 1c000000 09010840 01000000 ........@.......
19EBC090: 61003500 62 .5.ab
--襷讌襷朱 覿企慨覃
Status Bits(1 byte) : 30
讌 (1 byte) : 00
貉朱れ 襯 谿場 豺(2 byte) : 002b
c1貉(char) data(4 byte) : 61622020 --ab ( space襯 蟲 蟲)
c3貉(int) data(4 byte) : 00000003 --3
c4貉(datetime) data(8 byte) : 0000934d00ea19ec --2003-03-31 14:12:20.200
c5貉(smalldatetime) data(4 byte) : 934d0354 --2003-03-31 14:12:00
c6貉(decimal) data(9 byte) : 000000000000025801 --6.00
c7貉(float) data(8 byte) : 0000000000001c40 --7.0
c8貉(tinyint) data(1 byte) : 08 --8
c9貉(bit) data(1 byte) : 01 --1 (1bit貉 8螳蟾讌 1byte襦 豌襴)
貉朱れ (2 byte) : 0009
null 觜碁У(2 byte) : 0000 --貉殊 9螳 企襦 2byte
螳覲蠍語 貉殊 (2 byte) : 0001
c2貉(varchar) 豺(2 byte): 0035
c2貉(varchar) data : 6162 --ab (space )
/*------------------------------------------------------------------------------*/
蟆磯 : れ 碁一 蠍語伎. 蠏碁蟲, 襴 .
data, index page 螻牛旧
1. 螻蠍語 貉殊 蟆曙 null レ 朱 覓伎^蟇 螻糾 谿讌.
2. 螳覲蠍語 貉殊 蟆曙 null 蟆曙 螻糾 谿讌讌 .
3. 企 語 讌伎 襦 ル讌 .
-> 螻蠍語 貉殊 朱 覈願, 螳覲蠍語 貉殊 る 覈碁.
data page 蟆曙
1. 企ろ 碁煙り 蟆曙
-> 螻蠍語 貉殊 syscolumns 企 offset 螳朱 企 豺襯 覦襦 谿場 .
-> 螳覲蠍語 貉殊 ?
-> syscolumns 企 offset 螳朱 n覯讌 螳覲蠍語 貉殊企朱 覲企ゼ 詞
n覯讌 螳覲蠍語 貉殊 豺襯 谿場伎伎 蠏瑚崖 data襯 蟶朱 .
2. 企ろ 碁煙り 蟆曙
-> data page豌願 覓朱Μ朱 讌 . る offset table .
-> nonunique 蟆曙 unique 螳 襷れ 譯手鍵 伎 int 貉殊 覿碁.
蠏碁, int 豌企 螻蠍語 企 企ろ 碁煙れ 覿企 int 貉殊
螳覲蠍語 貉殊朱 豌襴 れ曙 .
index page 蟆曙
1. 企ろ 碁煙り 蟆曙
1) 覿襷 伎襯 螳讌.(伎誤(4)-id(2)-slot(2))
2) 螳覲蠍語 貉殊 null 手化一 碁煙 伎 覿襷 覲企 螳讌.
2. 企ろ 碁煙り 蟆曙(企ろ 碁煙)
1) 覿襷 伎 螻 企ろ 碁煙れ り 螳讌.
2) 螳覲蠍語 貉殊 null 手化一 碁煙 伎 企ろ 碁煙れ 覲企 螳讌.
3) 企ろ 碁煙 貉殊 覓伎^蟇 企ろ 碁煙れ .
朱朱 企ろ 碁煙 貉 + 企ろ 碁煙 貉 企一朱 ル讌襷
蠏碁, 碁煙 煙 伎襦 企ろ 碁煙れ 企ろ 碁煙 貉殊
譴螳 l伎 誤 蟆曙磯 語朱 企ろ 碁煙るゼ 襷る 讌 襦
襷れ伎.(, 螻蠍語 螳覲蠍語企 狩 蟆曙一襷, 蠏碁讌 蟆曙磯 螻蠍語
貉殊 り 螳覲蠍語 貉殊 れ .)
蟠, 蟆磯譟一姶 蟲一... 願姥 蟾 ? - 蠏碁 蟆 蟾 ^o^ ;;;;;
/*------------------------------------------------------------------------------*/
varchar襯 覃 リ概螳 蟆 谿讌覩襦 襷 襭襯 伎 l .
襷手 ?
炎貉殊碁煙 : varchar襦 誤 るる - 4byte
2貉朱概碁煙 : varchar襦 誤 るる - 6byte
3貉朱概碁煙 : varchar襦 誤 るる - 8byte
螳, 螻蠍語 貉 譟一姶 char襦 れ讌 螻 varchar襦 蟆曙郁 襷 .
る狩伎 覈襯願讌襷, 企 ms-sql襷殊 螻蠍語 貉 讀, 覿覿 貊 貉殊
varchar覲企る char襦 ′譯朱蟆 譬讌 蟾 .
覓語襯 row襷 豕 4byte 伎 るる 豌蟆企.
襷 100襷蟇伎企朱
1貉 碁煙 : 4 * 1000000 = 4000000 byte = 3096 kb = 3 mb = 488 page
2貉 碁煙 : 6 * 1000000 = 6000000 byte = 5859 kb = 5 mb = 732 page
3貉 碁煙 : 8 * 1000000 = 8000000 byte = 7812 kb = 7 mb = 976 page
る 豌 るる企.
/*------------------------------------------------------------------------------*/
轟, 覲企 誤 伎 覃 Inside SQL Server 2000企朱 豈 覲伎讌,
磯殊 螳 螳譬(SQL Server 2000 Internal - 襭) .