[译]SQL Server 之 索引基础

SQL Server中,索引以B-tree的结构组织数据。B-tree代表平衡树,但是SQL Server使用一种叫做B+的树。

B+树不是总是保持严格的平衡的树。

首先,索引有两个主要的部件:一个页级别,更多的非页级别的。

页层包含实际的内容。

非页层只是用来帮助查找页层。

分析索引的工具

使用dm_db_index_physical_stats

SELECT  *

    FROM    sys.dm_db_index_physical_stats(NULL, NULL, NULL, NULL, NULL) ;

简单的看看这里的几个参数

create function sys.dm_db_index_physical_stats

(

    @DatabaseId            SMALLINT        = 0,

    @ObjectId              INT             = 0,

    @IndexId               INT             = -1,

    @PartitionNumber       INT                = 0,

    @Mode                  nvarchar(20)      = NULL

)

可以用DB_ID('databasename')来根据数据库名指定数据库Id

可以用OBJECT_ID('objectname')来根据对象名指定对象Id

这个视图可以很有效的反应索引的状态。

理解索引结构

就像我们上面所说的,索引分页层和非页层。本节内容将帮助你们更好的理解索引的结构。

首先,所有的聚集索引必须是惟一的。

其次,所有的聚集索引都会被非聚集索引说包含。所以聚集索引的值应当越短越好。

再次,由于聚集索引是数据库里重复最多的一个东西,所以聚集索引的值不要有频繁的修改操作。

以上3点组成了聚集索引的三大要素,唯一,精简,稳定。

当然,如果你的表中没有非聚集索引,精简和稳定这两点可以酌情考虑。

非聚集索引

对于聚集索引,页层就存在数据。

对于非聚集索引,页层保存在索引的键,包含的include数据,以及数据行的一个书签(如果表是heap形式,则保留一个RID).

非聚集索引有两种使用方式,索引覆盖和索引书签查找。

------------------------------

这里省略一系列很关键的东西,逐渐补完。

-----------------------------

你可能感兴趣的:(SQL Server)