作者:处男是你_909 | 来源:互联网 | 2023-10-17 15:17
页分裂概念不管是聚集索引还是非聚集索引我们在插入数据后难免的会对数据增删改那么我们涉及到一个问题我们建立的索引会因为数据的变动而变得混乱比如下面聚集索引如果我insert了
页分裂 概念
不管是聚集索引 还是非聚集索引
我们在插入数据后 难免的会对数据增删改 那么我们涉及到一个问题
我们建立的索引会因为数据的变动 而变得混乱
比如 下面 聚集索引 如果我insert 了100条O 和P开头的数据 page120 存不下了 数据行满了 只能新建一个131页 来存储
这时候 每一次查询 数据差120页的时候 会跳到131页 查完在跳回来130页 这样 数据操作多了 数据查询也就卡了 因为它不连续了 它会到处去跳页查询 这就是页分裂
当然非聚集也是一个到底 不过它跳转的索引页
那么怎么看数据页分裂情况那?
DBCC showcontig(表名,索引名)
我们看一下
日语的是我们公司现用的数据量最多的表 汉语的是拿来翻译的
首先我没看
扫描页数: 就是数据表一共存储数据用了多少了页 34099页
扫描区 :就是存储页用了多少个区 8页为一个区 用了4349个区
每个区平均页数 是7.8 这个就是每个区平均多少页
扫描的密度:如果页都是连着的是 就100% 咱的是是12.50 % 越低说明查询数据的时候跳转的越频繁
逻辑扫描碎片: 99.24 就是页分裂 已经达到了 99.24% 基本到处都是碎页
区碎片 :区之间跳转为62% 区也是不连续的
解决
碎片整理
DBCC indexdefrag(数据库名,表名,索引名)
执行以下
扫描 33281页 移动 23776 移出10237 我们再看一下数据
数据都很好了~ 扫描的密度 达到99% 那么查询起来就很快了
定期整理索引 是一个好习惯
填充因子
还有一个办法就是定期重建索引 并增加填充因子
填充因子的概念就是 因为数据增删改 会引起页裂变 那么原因是页被数据占满了 在创建的时候就满了
那么我们在创建页的时候 能不能给位置预留出来 这样数据插入的时候就会降低页分裂
图里是预留了百分之50 这样的话 页会增多 以前50页能存满的数据要 100页
怎么创建填充因子那
语句
Create nonclustered index non_name on TS(name)
with drop_existing,fillfactor = 65
这样 打个比方 如果一个库一直在增删改 一个月要整理一次索引 用了创建索引和填充因子 至少3个月不用整理