SqlServer-索引

本文总结了SQL Server中索引碎片可能导致的查询性能问题,以及两种解决方法:DBCC DBREINDEX/INDEXDEFRAG和ALTER INDEX REORGANIZE/REBUILD。DBCC方法适用于SQL Server 2000,而ALTER INDEX适用于SQL Server 2005及以上版本。还介绍了如何通过数据库维护计划定期优化索引。
摘要由CSDN通过智能技术生成
年老小白一第二条
SqlServer-索引

(生产上的数据查询突然变得超慢,遂查询诸多,在此简单总结)
缘由:表的增删改会造成索引碎片,碎片率达到一定程度,会造成索引无用,所以会慢,故:需重建索引!
两种方法:dbcc dbreindex/indexdefrag(重建【锁表】/整理)和alert index reorganize/rebuild(重组/重建)

一、DBCC DBREINDEX/INDEXDEFRAG

此方法一般在SqlServer2000中使用,重建索引(单个或多个)。(官方文档:后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 改用 ALTER INDEX。)

使用:
DBCC SHOWCONTIG(表名)
查看碎片使用情况—(注意)—扫描密度[最佳计数/实际计数]:最佳计数与实际计数相当时说明索引是比较好的,如相差太多,就需要重新建或组织索引。
DBCC DBREINDEX(表名,’’,填充因子)
第一个参数是要重建索引的表名;第二个参数指定索引名称;空着就表示所有;第三个参数叫填充因子,是指索引页的数据填充程度,0表示使用先前的值,100表示每个索引页都填满,这时查询效率最高,但插入索引时会移动其它索引,可根据实际情况来设置。
DBCC INDEXDEFRAG(0,表名,索引名)
整理索引碎片,不更新表的统计信息

通过sql server 代理创建定时任务定期来重建索引

DECLARE @TABLENAME NVARCHAR(MAX)
IF(CURSOR_STATUS('global','TABLE_CURSOR')<>'-3')
	BEGIN
		CLOSE TABLE_CURSOR
		DEALLOCATE TABLE_CURSOR
	END
DECLARE TABLE_CURSOR CURSOR FOR SELECT NAME FROM SYS.objects WHERE TYPE = 'U' AND name LIKE 'T_HIS%' ORDER BY modify_date DESC
OPEN TABLE_CURSOR
FETCH NEXT FROM TABLE_CURSOR INTO @TABLENAME
WHILE (@@FETCH_STATUS = 0) 
	BEGIN 
		dbcc dbreindex (@TABLENAME,'',80)
		FETCH NEXT FROM TABLE_CURSOR INTO @TABLENAME
	END
CLOSE TABLE_CURSOR
DEALLOCATE TABLE_CURSOR

二、ALERT INDEX REORGANIZE/REBUILD

SqlServer2005语法。

使用:
alter index all on table_name rebuild with (online=on)
重建表上的所有索引
alter index index_name on table_name rebuild with (online=on)
重建表上的某个索引
alter index all on table_name reorganize
重组表上的所有索引
alter index index_name on table_name reorganize
重组表上的某个索引

总结:
1.重组索引是在线重整Index,不会对Table锁定,重新生成索引会对Table进行锁定;重建索引期间加上>
2.重组索引的100%进度可以通过sys.dm_exec_requests的字段percent_complete来查看

完整代码(根据碎片率选择重组或重建)

--1.查看碎片
SELECT  DB_NAME() 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值