MS SQL Server 中索引很多,时间长了,最好重建一下,保证数据库的可靠性。
Step 1. 获取index, 建立执行脚本。
CREATE TABLE #table_index (
table_index_id INT IDENTITY(1, 1) NOT NULL,
table_name VARCHAR(255) NULL,
index_name VARCHAR(255) NULL,
sql_statement VARCHAR(5000) NULL,
)
INSERT #table_index (
table_name,
index_name)
SELECT c.name + '.' +
a.name AS table_name,
b.name AS index_name
FROM sysobjects a
INNER JOIN sysindexes b
ON a.id = b.id
AND b.indid <> 0 -- table itself
AND b.indid <> 255 -- text column
AND a.name <> 'dtproperties'
AND a.type = 'u'
INNER JOIN sysusers c
ON c.uid = a.uid
ORDER BY 1
IF @@ERROR <> 0
BEGIN
RAISERROR('error occured while populating a temp table', 16, 1)
RETURN
END
UPDATE #table_index
SET sql_statement =
'DBCC INDEXDEFRAG(' + db_name() + ', ''' + table_name + ''',''' + index_name + ''')'
FROM #table_index a
select * from #table_index
执行上述脚本,获取index 集合
Step2: 然后 从结果集中拷贝sql_statement列内容到sql management studio.
执行这些dbcc command:
DBCC INDEXDEFRAG(hotel, 'dbo.GuestInfo','PK__GuestInf__0C47285A15502E78')
.......
Step3: check result when finished.检查结果中的Message信息,确保成功。
Done.