当前位置:  开发笔记 > 数据库 > 正文

是否所有SQL Server版本都自动重建索引或具有默认的重建条件?

如何解决《是否所有SQLServer版本都自动重建索引或具有默认的重建条件?》经验,为你挑选了2个好方法。

是否所有SQL Server版本都自动重建索引或具有默认的重建条件?我知道统计数据会自动重建,但不确定索引是否也可以.



1> Chris..:

任何版本的Microsoft SQL Server都不会自动支持重建索引 - 原因是重建索引可能是非常昂贵的操作,因此需要仔细调度和规划.

在许多环境中,将编写特殊脚本来处理此问题,例如:

http://weblogs.sqlteam.com/tarad/archive/2008/09/03/Defragmenting-Indexes-in-SQL-Server-2005.aspx

请注意,虽然SQL在很多情况下可以自动为您更新统计信息,但通过更仔细地管理这些统计信息可以获得性能提升.



2> badbod99..:

正如人们在此处提到的,您的索引不会自动重建.这在SQL Server中是一个非常大的问题,因为索引会随着时间的推移而碎片化.您可以发现您的索引是95%加上碎片,严重影响查询性能.

这是一个简单的查询来检查现有索引上的碎片:

DECLARE @DBNAME VARCHAR(130);
SET @DBNAME = 'MYDBNAME';

DECLARE @DBID INT;
SET @DBID = DB_ID(@DBNAME);

SELECT
OBJECT_ID AS objectID
, index_id AS indexID
, avg_fragmentation_in_percent AS fragmentation
, page_count 
INTO #indexDefragList
FROM
sys.dm_db_index_physical_stats 
(@DBID, NULL, NULL , NULL, N'Limited')
WHERE
index_id > 0
OPTION (MaxDop 1);

SELECT
i.[name] as indexname,
d.fragmentation,
d.page_count
FROM
#indexDefragList d
INNER JOIN sys.indexes i
ON d.objectid = i.object_id
ORDER BY 
d.fragmentation DESC

DROP TABLE #indexDefragList

这将返回当前数据库中所有索引的列表,其碎片为%.

您可以轻松地构建脚本以自动重建或重新组织它们.SQLFool上有一篇很棒的文章,包括一个完整的预制脚本.

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有