如题,我检索到一个表内一索引碎片等于50%,所以重新生成它:--该索引为聚集索引
ALTER INDEX [I_S#_C#] ON [dbo].[SC] REBUILD现在的问题是:好奇怪,为何我重新生成索引后检索 它的碎片百分比还是50%,没有变化?
是否有可能有些索引本身就存在比较高的逻辑碎片百分比,即使重新生成也无法解决?
求解释...

解决方案 »

  1.   

    没有,直接REBUILD,不是说碎片30%以上就建议REBUILD重新生成的么
      

  2.   

    给结果看看,
    DBCC SHOWCONTIG(表名,索引名)
      

  3.   


    /*
    OBJECT_ID   INDEX_ID    PARTITION_NUMBER AVG_FRAGMENTATION_IN_PERCENT OBJECT_NAME                                                                                                                      SCHEMA_NAME                                                                                                                      INDEX_NAME                                                                                                                       PARTITION_COUNT
    ----------- ----------- ---------------- ---------------------------- -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ---------------
    2009058193  1           1                50                           SC                                                                                                                               dbo                                                                                                                              I_S#_C#                                                                                                                          1(1 行受影响)
    */
    DBCC SHOWCONTIG(SC,I_S#_C#)
    /*DBCC SHOWCONTIG 正在扫描 'SC' 表...
    表: 'SC' (2009058193);索引 ID: 1,数据库 ID: 9
    已执行 TABLE 级别的扫描。
    - 扫描页数................................: 2
    - 扫描区数..............................: 1
    - 区切换次数..............................: 0
    - 每个区的平均页数........................: 2.0
    - 扫描密度 [最佳计数:实际计数].......: 100.00% [1:1]
    - 逻辑扫描碎片 ..................: 50.00%
    - 区扫描碎片 ..................: 0.00%
    - 每页的平均可用字节数.....................: 1044.0
    - 平均页密度(满).....................: 87.10%
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    */
    这个看完要怎么操作^^
      

  4.   

    你聚集索引页才两页
    你DBCC DBREINDEX(表名,索引名)
    再DBCC SHOW...给结果看看,
      

  5.   

    看来是用习惯2000版本的前辈了..哈 咋老喜欢用快删除的命令.
    我用的是简单的学生数据库测试的.
    请问这个,聚集索引页大小有何关系?DBCC DBREINDEX(SC,I_S#_C#)
    /*DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。*/
    DBCC SHOWCONTIG(SC,I_S#_C#)
    /*DBCC SHOWCONTIG 正在扫描 'SC' 表...
    表: 'SC' (2009058193);索引 ID: 1,数据库 ID: 9
    已执行 TABLE 级别的扫描。
    - 扫描页数................................: 2
    - 扫描区数..............................: 1
    - 区切换次数..............................: 0
    - 每个区的平均页数........................: 2.0
    - 扫描密度 [最佳计数:实际计数].......: 100.00% [1:1]
    - 逻辑扫描碎片 ..................: 50.00%
    - 区扫描碎片 ..................: 0.00%
    - 每页的平均可用字节数.....................: 1044.0
    - 平均页密度(满).....................: 87.10%
    DBCC 执行完毕。如果 DBCC 输出了错误信息,请与系统管理员联系。
    */
    ----ALTER 之
    ALTER INDEX [I_S#_C#] ON [dbo].[SC] REBUILD
    --还是以上老样子.不会是因为我这表记录太少 表结构太简单了吧?
    考虑其他问题?索引的重新组织跟重新生成应该只跟这索引有关吧?跟其他信息比如表关系什么的都没关系吧?
      

  6.   

    可能是由于你表小的缘故,总共才两页而已
    SQL2K5以上还没怎么整过,
    查询IAM页
    --
    逻辑扫描碎片 对索引的叶级页扫描所返回的无序页的百分比。该数与堆集和文本索引无关。无序页是指在 IAM 中所指示的下一页不同于由叶级页中的下一页指针所指向的页。 你有兴趣看看小麦和石头,影子老师的博客,有讲如何查看底层索引页和数据页的,再看一下是不是IAM指向的不同你索引页第一页所指向的
      

  7.   

    嗯,我看了..这次倒是学习到了..我差点以为语句没效果.BUG了……呵呵,十分感谢。
    顺便看了页和区的一些概念。
    加了聚集索引不就不是IAM的存储结构了吗?如何查看底层索引页和数据页..底层的不清楚只会简单使用,
    谢谢分享。