在针对SQL Server数据库的脚本下运行时发生了什么。
我的脚本:
set arithabort on
set quoted_identifier on
use TestDB
declare objcur cursor for
select name
from sysobjects
where type = 'u'
order by name
declare @obj sysname
open objcur
fetch next from objcur into @obj
while (@@fetch_status = 0)
begin
dbcc dbreindex( @obj ) WITH NO_INFOMSGS
fetch next from objcur into @obj
end
deallocate objcur
答案 0 :(得分:2)
您是
这不是一个好主意,因为您的入门者门槛为零。这意味着您将重建每个索引,而不管其是否碎片化以及该索引的页数如何。因此,如果您在一个新表上创建了一个新索引并运行了此命令,它将重新构建它。另外,这是离线操作。因此,在重建的整个过程中,将为非聚集索引保留一个共享锁,这可以防止对该表进行任何修改...
我会考虑使用Ola's scripts。他们远胜于上。然后,我将从Brent Ozar再到in this post上阅读关于碎片化的神话和误解。
答案 1 :(得分:0)
您可以使用以下语句重建所有索引。
Exec sp_msforeachtable 'ALTER INDEX ALL ON ? REBUILD'