SQLServer索引重建的方法
索引重建是指用一种运行中的操作,来更新旧的索引,以便提高数据存取性能。尽管索引重建有助于提高性能,但它也增加了数据库系统的负担,因此在许多情况下,它都是伴随着一定的风险的。另外,重建索引也需要在一定程度上使用系统资源,常见的两个因素是存储空间和 CPU 负荷,不可忽视。SQL Server 索引重建有几种方式,包括 ALTER INDEX REBUILD 和 ALTER INDEX REORGANIZE 等操作,这里将重点介绍前者。
一、ALTER INDEX REBUILD
ALTER INDEX REBUILD 命令的主要目的是重建索引,以便在新页上排序现有的索引关键字,从而降低表碎片(聚集索引)或非聚集索引(非聚集索引)的数量,改善索引存取性能。
ALTER INDEX REBUILD 语句语法如下:
ALTER INDEX
{ { index_name |ALL }
ON table_name
REBUILD [PARTITION = { partition_number | ALL } ]
[ WITH (
[ ONLINE | OFFLINE ] ]
其中的 index_option 可以是:
ALLOW_ROW_LOCKS = {ON | OFF }
ALLOW_PAGE_LOCKS = {ON | OFF }
IGNORE_DUP_KEY = {ON | OFF }
FILLFACTOR = fillfactor
SORT_IN_TEMPDB = {ON | OFF }
STATISTICS_NORECOMPUTE = {ON | OFF }
MAXDOP = max_degree_of_parallelism
例如,以下是 ALTER INDEX REBUILD 的一个示例:
ALTER INDEX IX_NAME
ON TABLE1
REBUILD
WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON)
这个命令将重建 TABLE1 表上的 IX_NAME 索引,并将 FILLFACTOR 选项设置为 80 ,SORT_IN_TEMPDB 选项设置为 ON 。
二、ALTER INDEX REORGANIZE
ALTER INDEX REORGANIZE 命令为一个既有的索引提供了一个更整洁的索引结构,而不会改变其关键字顺序或填充因子(FILLFACTOR)。与 ALTER INDEX REBUILD 相比,ALTER INDEX REORGANIZE 的执行速度会更快,查询结果也会更快 。
以下是 ALTER INDEX REORGANIZE 的语法:
ALTER INDEX index_name
ON table_name
REORGANIZE [PARTITION = partition_number]
] WITH ( LOB_COMPACTION = { ON | OFF } )
此外,我们可以通过 sp_rebuildindex 存储过程来重建或重组索引,它与 ALTER INDEX REBUILD 命令的功能相似,并提供了更多的调整参数,通过这些参数,可以控制进程的更新过程,如下所示:
EXEC sp_rebuildindex 'table_name', 'index_name', 0, 90, 'fillfactor'
其中,0 表示无时间限制,90 表示分配处理 90% 索引重建操作的 CPU 时间,fillfactor 表示指定 FILLFACTOR。如果不设置 FILLFACTOR,则默认使用表的填充因子,即使用 0 值 。
三、SQL Server 索引重建的建议
1. 需要调整 SQL Server 索引重建时,首先需要确定索引文件是否太大或表碎片多,以及索引为什么穿越性能低。
2. 在进行 ALTER INDEX REBUILD 时,如果表碎片过多,需要重新排序数据库表;不过,这取决于建立表的方式,在某些情况下,推荐重建非聚集索引。
3. 在进行 ALTER INDEX REORGANIZE 时,可以保持索引中的关键字顺序不变,此外,通过它还可以范围删除索引中的行。
4. 在 ALTER INDEX REBUILD 和 ALTER INDEX REORGANIZE 操作的时候,只有使用系统资源时,例如存储空间和 CPU 负荷,才会这么做,其他情况下,可以保留现有索引。
5. 在表较大时,建议在晚上,对相关表重建索引,以免影响用户正常使用,并且检查错误日志,记录使用系统资源的情况。
四、总结
以上就是关于SQL Server 索引重建的一些常用方法,索引重建有助于提高数据库性能,但是使用前要充分考虑,避免误操作,最大限度的保证数据的完整性和安全性。