zoukankan      html  css  js  c++  java
  • SQL Server 的索引结构实例

    目前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 。

     
     
  • 相关阅读:
    笔记12:maven项目管理工具
    笔记11:Oracle基础
    笔记10:springMVC
    笔记9:spring
    笔记8:mybatis
    Bad Sequence
    Optimal Currency Exchange
    Two Small Strings
    Equalizing by Division (easy version)&&(hard version)
    Codeforce 1096:D. Easy Problem(DP,思维)
  • 原文地址:https://www.cnblogs.com/lenther2002/p/6797128.html
Copyright © 2011-2022 走看看