1. 程式人生 > >SQL Server 的索引結構實例

SQL Server 的索引結構實例

strong insert add http person border blog ace use

目前SQL Server 的索引結構如下:

這個是聚集索引的存放形式:

技術分享

非聚集索引的方式如下:

技術分享

技術分享

它們是以B+樹的數據結構存放的。

相信大家都看過類似的圖,但是沒有直觀的認識,下面舉一個實際的例子來說明圖的結構。

1 2 3 4 5 6 7 8 9 10 11 USE Test --1.創建表,指定主鍵(會自動創建聚集索引) CREATE TABLE Person ( Id int NOT NULL IDENTITY, Name varchar(10) NOT NULL, Sex varchar(2) NOT
NULL, CONSTRAINT PK_Person PRIMARY KEY(Id) ); --2.創建非聚集索引 CREATE INDEX idx_Person_Sex ON Person(Sex);

技術分享

1 2 3 4 --3.插入1筆數據 Insert Person values(‘P0‘,‘M‘); --4.查看表有哪些頁 DBCC ind ( Test, [dbo.Person], -1)

技術分享

1 2 3 4 --5. 打開3604監控
DBCC TraceON(3604,-1) --6.查看聚集索引葉子節點頁的數據 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 --7.插入1000條M和500條W記錄 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 --8.查看表有哪些頁 DBCC ind ( Test, [dbo.Person], -1)

技術分享

1 2 --9.查看聚集索引頁的數據 DBCC PAGE (Test,1,209, 3);

技術分享

1 2 --10.查看非聚集索引頁的數據 DBCC PAGE (Test,1,189, 3);

技術分享

Index 的總結:

一個Index 可以有多個Page

Index 是以B+樹結構存放的,其中分支節點的信息是存在一個Page中,而葉子節點存放在其他Page 。

技術分享

SQL Server 的索引結構實例