日期:2014-05-18  浏览次数:20460 次

怎样让索引的扫描密度达到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