索引碎片两种类型
一 外部碎片
产生的原因是因为索引不按照的逻辑顺序排列
比如 现在的索引页分配顺序是
第一页 第二页 第三页
数据:2 4 6 8 10 12 14 16 18 20 22 24
当我们插入新的数据比如5,系统可能就会这样分配,产生一个新的索引页
第一页 第二页 第三页 第四页
数据: 2 4 5 10 12 14 16 18 20 22 24 6 8
这时如果我们要查询4-10的数据,就需要一个额外的页来返回6,8两个数据
二 内部索引碎片
产生的原因是因为索引页没有充分利用到所分配的空间,内部索引碎片会导致增加索引空间
三 我们可以使用DBCC SHOWCONTIG来检查索引碎片
用法:
DBCC SHOWCONTIG WITH ALL_INDEXES
返回结果
DBCC SHOWCONTIG scanning 'authors' table...
Table: 'authors' (1977058079); index ID: 1, database ID: 5
TABLE level scan performed.
- Pages Scanned................................: 1
- Extents Scanned..............................: 1
- Extent Switches..............................: 0
- Avg. Pages per Extent........................: 1.0
- Scan Density [Best Count: Actual Count]......: 100.00% [1:1]
- Logical Scan Fragmentation ..................: 0.00% --碎片报告
- Extent Scan Fragmentation ...................: 0.00% --碎片报告
- Avg. Bytes Free per Page.....................: 6002.0
- Avg. Page Density (full).....................: 25.85%
四 解决办法是
1 表上 删除和重建索引
2 DBCC DBREINDEX
3 DBCC INDEXDEFRAG