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).
非聚集索引有两种使用方式,索引覆盖和索引书签查找。
------------------------------
这里省略一系列很关键的东西,逐渐补完。
-----------------------------