目前SQL Server 的索引结构如下:
这个是聚集索引的存放形式:

非聚集索引的方式如下:


它们是以B+树的数据结构存放的。
相信大家都看过类似的图,但是没有直观的认识,下面举一个实际的例子来说明图的结构。
1
2
3
4
5
6
7
8
9
10
11
|
USE Test
CREATE TABLE Person
(
Id int NOT NULL IDENTITY,
Name varchar (10) NOT NULL ,
Sex varchar (2) NOT NULL ,
CONSTRAINT PK_Person PRIMARY KEY (Id)
);
CREATE INDEX idx_Person_Sex ON Person(Sex);
|

1
2
3
4
|
Insert Person values ( 'P0' , 'M' );
DBCC ind ( Test, [dbo.Person], -1)
|

1
2
3
4
|
DBCC TraceON(3604,-1)
DBCC PAGE (Test,1,174, 1);
|

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
SET NOCOUNT ON ;
GO
DECLARE @i int ;
SET @i = 1000;
WHILE @i < 2000
BEGIN
Insert Person values ( 'P' + convert ( varchar (10),@i), 'M' );
SET @i = @i + 1;
END ;
DECLARE @i int ;
SET @i = 2000;
WHILE @i < 2500
BEGIN
Insert Person values ( 'P' + convert ( varchar (10),@i), 'W' );
SET @i = @i + 1;
END ;
GO
DBCC ind ( Test, [dbo.Person], -1)
|

1
2
|
DBCC PAGE (Test,1,209, 3);
|

1
2
|
DBCC PAGE (Test,1,189, 3);
|

Index 的总结:
一个Index 可以有多个Page
Index 是以B+树结构存放的,其中分支节点的信息是存在一个Page中,而叶子节点存放在其他Page 。

(责任编辑:IT) |