怎样让索引的扫描密度达到100% (无碎片)
已知表 eat_info 中有 索引 PK_EAT_INFO ,使用dbcc showcontig 扫描碎片信息:
declare @table_id int
set @table_id=object_id( 'eat_info ')
dbcc showcontig(@table_id)
扫描结果如下:
DBCC SHOWCONTIG 正在扫描 'EAT_INFO ' 表...
表: 'EAT_INFO '(2134298663);索引 ID: 0,数据库 ID: 13
已执行 TABLE 级别的扫描。
- 扫描页数.....................................: 274
- 扫描扩展盘区数...............................: 120
- 扩展盘区开关数...............................: 119
- 每个扩展盘区上的平均页数.....................: 2.3
- 扫描密度[最佳值:实际值]....................: 29.17%[35:120]
- 扩展盘区扫描碎片.............................: 96.67%
- 每页上的平均可用字节数.......................: 1476.5
- 平均页密度(完整)...........................: 81.76%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
重建索引
dbcc dbreindex( 'EAT_INFO ',PK_EAT_INFO,100)
再扫描结果还是:
DBCC SHOWCONTIG 正在扫描 'EAT_INFO ' 表...
表: 'EAT_INFO '(2134298663);索引 ID: 0,数据库 ID: 13
已执行 TABLE 级别的扫描。
- 扫描页数.....................................: 274
- 扫描扩展盘区数...............................: 120
- 扩展盘区开关数...............................: 119
- 每个扩展盘区上的平均页数.....................: 2.3
- 扫描密度[最佳值:实际值]....................: 29.17%[35:120]
- 扩展盘区扫描碎片.............................: 96.67%
- 每页上的平均可用字节数.......................: 1476.5
- 平均页密度(完整)...........................: 81.76%
DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
执行DBCC INDEXDEFRAG(sjhy1,eat_info , pk_eat_info)WITH NO_INFOMSGS
再扫描,还是一样。
执行如下语句,重建表
select * into info_bak from eat_info
if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[EAT_INFO] ') and OBJECTPROPERTY(id, N 'IsUserTable ') = 1)
drop table [dbo].[EAT_INFO]
GO
go
CREATE TABLE [dbo].[EAT_INFO] (
[EAT_AUTOID] [int] NOT NULL ,
[EAT_ID] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Eat_Sign] [char] (500) COLLATE Chinese_PRC_CI_AS NULL ,
[Eat_Company] [int] NULL ,
[Eat_Room] [int] NULL ,
[Eat_Mansum] [int] NULL ,
[Eat_Phase] [int] NULL ,
[EAT_ETIME] [datetime] NULL ,
[EAT_BTIME] [datetime] NULL ,
[EAT_Z_MONEY] [money] NULL ,
[EAT_K_MONEY] [money] NULL ,
[EAT_Y_MONEY] [money] NULL ,
[EAT_W_MONEY] [money] NULL ,
[EAT_STATE] [int] NULL ,
[EAT_JDY] [int] NULL ,
[Eat_Waiter] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[Eat_Bz] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[Yx] [bit] NOT NULL ,
[iccard_autoid] &nb