📅  最后修改于: 2023-12-03 15:42:06.688000             🧑  作者: Mango
在 SQL Server 数据库中,索引是一种数据结构,用于加快数据检索过程的速度。如果索引不正确或过时,会导致查询效率低下,因此需要及时重新索引。
SQL Server 中的索引需要定期重新构建或重新组织,以保证其最佳性能。具体原因如下:
在 SQL Server 中,可以通过以下两种方式重新索引:
在此,我们介绍第二种方法,即使用 Transact-SQL 命令重新索引。
在重新索引之前,需要确定哪些表需要进行重新索引。您可以通过以下两种方式确定需要重新索引的表:
SELECT
OBJECT_SCHEMA_NAME(i.OBJECT_ID) AS SchemaName,
OBJECT_NAME(i.OBJECT_ID) AS TableName,
i.name AS IndexName,
i.index_id,
s.avg_fragmentation_in_percent
FROM
sys.dm_db_index_physical_stats(DB_ID(),NULL,NULL,NULL,'LIMITED') s
INNER JOIN sys.indexes i ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
WHERE
OBJECTPROPERTY(i.OBJECT_ID,'IsUserTable') = 1
AND s.avg_fragmentation_in_percent > 30
ORDER BY
s.avg_fragmentation_in_percent DESC;
这段代码将返回数据库中所有平均碎片率大于 30% 的表。
确定需要重新索引的表后,可以使用以下代码重新索引表:
USE [DatabaseName];
GO
EXEC sp_msforeachtable @command1='PRINT ''Rebuilding index for table ?''', @command2='ALTER INDEX ALL ON ? REBUILD WITH (FILLFACTOR = 90, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = OFF);';
GO
此代码将通过 sp_msforeachtable 存储过程自动循环重新索引所有表。
在 SQL Server 中,定期重新索引是保证数据库高性能的一项重要举措。您可以使用 SQL Server Management Studio 或 Transact-SQL 命令来重新索引表,将索引保持在最佳状态,提高查询性能。