索引碎片整理
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,查询是否发生了索引碎片SELECT object_name(dt.object_id) Tablename,si.name Indexname,dt.avg_fragmentation_in_perc
千家信息网最后更新 2025年11月06日索引碎片整理查询是否发生了索引碎片
SELECT object_name(dt.object_id) Tablename,si.name Indexname,dt.avg_fragmentation_in_percent AS ExternalFragmentation,
dt.avg_page_space_used_in_percent AS internalFragmentation
FROM
(
SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats (db_id('SmartTRMUAES'),null,null,null,'DETAILED')
WHERE index_id <> 0) AS dt
INNER JOIN sys.indexes si ON si.object_id=dt.object_id
AND si.index_id=dt.index_id AND dt.avg_fragmentation_in_percent>10
AND dt.avg_page_space_used_in_percent<75 ORDER BY avg_fragmentation_in_percent
DESC 使用下面的规则分析结果,你就可以找出哪里发生了索引碎片:
1)ExternalFragmentation的值>10表示对应的索引发生了外部碎片;
2)InternalFragmentation的值<75表示对应的索引发生了内部碎片。 如何整理索引碎片?
有两种整理索引碎片的方法:
1)重组有碎片的索引:执行下面的命令
ALTER INDEX ALL ON TableName REORGANIZE 2)重建索引:执行下面的命令
ALTER INDEX ALL ON TableName REBUILD WITH (FILLFACTOR=90,ONLINE=ON) 也可以使用索引名代替这里的"ALL"关键字重组或重建单个索引,也可以使用SQL Server管理工作台进行索引碎片的整理。 什么时候用重组,什么时候用重建呢? 当对应索引的外部碎片值介于10-15之间,内部碎片值介于60-75之间时使用重组,其它情况就应该使用重建。 值得注意的是重建索引时,索引对应的表会被锁定,但重组不会锁表,因此在生产系统中,对大表重建索引要慎重,因为在大表上创建索引可能会花几个小时,幸运的是,从SQL Server 2005开始,微软提出了一个解决办法,在重建索引时,将ONLINE选项设置为ON,这样可以保证重建索引时表仍然可以正常使用。 虽然索引可以提高查询速度,但如果你的数据库是一个事务型数据库,大多数时候都是更新操作,更新数据也就意味着要更新索引,这个时候就要兼顾查询和更新操作了,因为在OLTP数据库表上创建过多的索引会降低整体数据库性能。 我给大家一个建议:如果你的数据库是事务型的,平均每个表上不能超过5个索引,如果你的数据库是数据仓库型,平均每个表可以创建10个索引都没问题。
SELECT object_name(dt.object_id) Tablename,si.name Indexname,dt.avg_fragmentation_in_percent AS ExternalFragmentation,
dt.avg_page_space_used_in_percent AS internalFragmentation
FROM
(
SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats (db_id('SmartTRMUAES'),null,null,null,'DETAILED')
WHERE index_id <> 0) AS dt
INNER JOIN sys.indexes si ON si.object_id=dt.object_id
AND si.index_id=dt.index_id AND dt.avg_fragmentation_in_percent>10
AND dt.avg_page_space_used_in_percent<75 ORDER BY avg_fragmentation_in_percent
DESC 使用下面的规则分析结果,你就可以找出哪里发生了索引碎片:
1)ExternalFragmentation的值>10表示对应的索引发生了外部碎片;
2)InternalFragmentation的值<75表示对应的索引发生了内部碎片。 如何整理索引碎片?
有两种整理索引碎片的方法:
1)重组有碎片的索引:执行下面的命令
ALTER INDEX ALL ON TableName REORGANIZE 2)重建索引:执行下面的命令
ALTER INDEX ALL ON TableName REBUILD WITH (FILLFACTOR=90,ONLINE=ON) 也可以使用索引名代替这里的"ALL"关键字重组或重建单个索引,也可以使用SQL Server管理工作台进行索引碎片的整理。 什么时候用重组,什么时候用重建呢? 当对应索引的外部碎片值介于10-15之间,内部碎片值介于60-75之间时使用重组,其它情况就应该使用重建。 值得注意的是重建索引时,索引对应的表会被锁定,但重组不会锁表,因此在生产系统中,对大表重建索引要慎重,因为在大表上创建索引可能会花几个小时,幸运的是,从SQL Server 2005开始,微软提出了一个解决办法,在重建索引时,将ONLINE选项设置为ON,这样可以保证重建索引时表仍然可以正常使用。 虽然索引可以提高查询速度,但如果你的数据库是一个事务型数据库,大多数时候都是更新操作,更新数据也就意味着要更新索引,这个时候就要兼顾查询和更新操作了,因为在OLTP数据库表上创建过多的索引会降低整体数据库性能。 我给大家一个建议:如果你的数据库是事务型的,平均每个表上不能超过5个索引,如果你的数据库是数据仓库型,平均每个表可以创建10个索引都没问题。
索引
碎片
数据
数据库
重组
时候
更新
面的
查询
之间
事务
命令
幸运
仓库
关键
关键字
办法
单个
对大
小时
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
项目网络安全管理
显示服务器升级维护
数据库模型图片大全
oracle数据库 启动
学软件开发安排工作吗
松江区互联网教育科技软件
ICT网络技术路线
网吧服务器和硬盘哪个好用
社群和互联网属于科技类么
如何理解软件开发中的高级语言
数据库中设置两个值保持一致
科技公司外购软件开发分录
服务器国外服务商
我区网络安全宣传
什么是网络服务器的防护
惠普服务器硬盘回收
英文主流数据库
国家法律法规数据库检索步骤
网络安全法中的授权支付
会计转行做软件开发
网络安全web漏洞扫描课本目录
生成焓 数据库
cpws数据库
上海电商软件开发定制是什么
和平区网络安全培训
textbox显示数据库
数据库与数据表的创建与管理
源文鉴的数据库和知网的一样吗
深圳软件开发合法吗
南京 网络技术