示例代码:

 

View Code
1。创建一个和[Sales].[SalesOrderDetail]同结构的表格,这个表格上没有一个index,所以它是一个堆。
USE [AdventureWorks]
GO
drop table [Sales].[SalesOrderDetail_hash]
GO
CREATE TABLE [Sales].[SalesOrderDetail_hash](
    
[SalesOrderID] [int] NOT NULL,
    
[SalesOrderDetailID] [int] ,
    
[CarrierTrackingNumber] [nvarchar](25NULL,
    
[OrderQty] [smallint] NOT NULL,
    
[ProductID] [int] NOT NULL,
    
[SpecialOfferID] [int] NOT NULL,
    
[UnitPrice] [money] NOT NULL,
    
[UnitPriceDiscount] [money] NOT NULL ,
    
[LineTotal] numeric (38,6),
    
[rowguid] [uniqueidentifier] ,
    
[ModifiedDate] [datetime]
ON [PRIMARY]
GO
insert into [Sales].[SalesOrderDetail_hash]
select * from [Sales].[SalesOrderDetail]
go
dbcc showcontig('[Sales].[SalesOrderDetail_hash]')
go

表: 'SalesOrderDetail_hash' (2011154210);索引 ID: 0,数据库 ID: 6
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1494
- 扫描区数..............................: 188
- 区切换次数..............................: 187
- 每个区的平均页数........................: 7.9
- 扫描密度 [最佳计数:实际计数].......: 99.47% [187:188]
- 区扫描碎片 ..................: 1.06%
- 每页的平均可用字节数........................: 52.0
- 平均页密度(满).....................: 99.36%

 

 


2。创建一个同样的,但是有clustered index的表格。所以这是一颗B树。
-- 对于B树的操作
USE [AdventureWorks]
GO
drop table [Sales].[SalesOrderDetail_C]
GO
CREATE TABLE [Sales].[SalesOrderDetail_C](
    
[SalesOrderID] [int] NOT NULL,
    
[SalesOrderDetailID] [int] ,
    
[CarrierTrackingNumber] [nvarchar](25NULL,
    
[OrderQty] [smallint] NOT NULL,
    
[ProductID] [int] NOT NULL,
    
[SpecialOfferID] [int] NOT NULL,
    
[UnitPrice] [money] NOT NULL,
    
[UnitPriceDiscount] [money] NOT NULL ,
    
[LineTotal] numeric (38,6),
    
[rowguid] [uniqueidentifier] ,
    
[ModifiedDate] [datetime],
 
CONSTRAINT [PK_SalesOrderDetailC_SalesOrderID_SalesOrderDetailID] PRIMARY KEY CLUSTERED 
(
    
[SalesOrderID] ASC,
    
[SalesOrderDetailID] ASC
ON [PRIMARY]
ON [PRIMARY]
GO
insert into [Sales].[SalesOrderDetail_C]
select * from [Sales].[SalesOrderDetail]
go
dbcc showcontig('[Sales].[SalesOrderDetail_C]')WITH ALL_INDEXES 
go
表: 'SalesOrderDetail_C' (1915153868);索引 ID: 1,数据库 ID: 6
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1494
- 扫描区数..............................: 189
- 区切换次数..............................: 188
- 每个区的平均页数........................: 7.9
- 扫描密度 [最佳计数:实际计数].......: 98.94% [187:189]
- 逻辑扫描碎片 ..................: 0.40%
- 区扫描碎片 ..................: 0.53%
- 每页的平均可用字节数........................: 52.0
- 平均页密度(满).....................: 99.36%

3。创建一个同样的,但是Primary Key建立在nonclustered index上的表格。所以它是一个堆加一个B树。
USE [AdventureWorks]
GO
drop table [Sales].[SalesOrderDetail_N]
GO
CREATE TABLE [Sales].[SalesOrderDetail_N](
    
[SalesOrderID] [int] NOT NULL,
    
[SalesOrderDetailID] [int] ,
    
[CarrierTrackingNumber] [nvarchar](25NULL,
    
[OrderQty] [smallint] NOT NULL,
    
[ProductID] [int] NOT NULL,
    
[SpecialOfferID] [int] NOT NULL,
    
[UnitPrice] [money] NOT NULL,
    
[UnitPriceDiscount] [money] NOT NULL ,
    
[LineTotal] numeric (38,6),
    
[rowguid] [uniqueidentifier] ,
    
[ModifiedDate] [datetime],
 
CONSTRAINT [PK_SalesOrderDetailN_SalesOrderID_SalesOrderDetailID] PRIMARY KEY nonclustered 
(
    
[SalesOrderID] ASC,
    
[SalesOrderDetailID] ASC
ON [PRIMARY]
ON [PRIMARY]
GO
insert into [Sales].[SalesOrderDetail_N]
select * from [Sales].[SalesOrderDetail]
go
dbcc showcontig('[Sales].[SalesOrderDetail_N]')WITH ALL_INDEXES 
go

表: 'SalesOrderDetail_N' (1947153982);索引 ID: 0,数据库 ID: 6
已执行 TABLE 级别的扫描。
- 扫描页数................................: 1494
- 扫描区数..............................: 188
- 区切换次数..............................: 187
- 每个区的平均页数........................: 7.9
- 扫描密度 [最佳计数:实际计数].......: 99.47% [187:188]
- 区扫描碎片 ..................: 19.15%
- 每页的平均可用字节数........................: 52.0
- 平均页密度(满).....................: 99.36%
DBCC SHOWCONTIG 正在扫描 'SalesOrderDetail_N' 表...
表: 'SalesOrderDetail_N' (1947153982);索引 ID: 2,数据库 ID: 6
已执行 LEAF 级别的扫描。
- 扫描页数................................: 285
- 扫描区数..............................: 38
- 区切换次数..............................: 37
- 每个区的平均页数........................: 7.5
- 扫描密度 [最佳计数:实际计数].......: 94.74% [36:38]
- 逻辑扫描碎片 ..................: 1.05%
- 区扫描碎片 ..................: 94.74%
- 每页的平均可用字节数........................: 8.2
- 平均页密度(满).....................: 99.90%

第3种的非聚集索引用了两块空间,堆和B树。

三种存储方式的比较:

存储方式                                          使用页面数量       使用区数量

没有任何索引                1494            190

有聚集索引             1494          190

没有聚集索引,有非聚集索引        1779            228

建立聚集索引并没有增加使用空间,强烈建议在大表上建立聚集索引。

 

posted on 2011-07-23 10:07  cnby  阅读(238)  评论(0编辑  收藏  举报