Коэффициент заполнения -SQL Server, есть ли способ установить коэффициент заполнения для базы данных, сервера или схемы?
Я понимаю, что вы можете установить коэффициент заполнения по умолчанию, но я хочу изменить существующие коэффициенты заполнения по умолчанию для всего сервера.
3 ответа
НАЧАТЬ ТРАНС
ОБЪЯВИТЬ @table_name VARCHAR(МАКС.)
ОБЪЯВИТЬ table_cursor CURSOR LOCAL
FOR
ВЫБЕРИТЕ TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
OPEN table_cursor
ПОЛУЧИТЬ СЛЕДУЮЩИЙ ИЗ table_cursor INTO @table_name
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'ALTER INDEX ALL ON '+@table_name+'
REBUILD WITH (FILLFACTOR = 100) '
END
CLOSE table_cursor;
DEALLOCATE table_cursor;
ROLLBACK TRAN
DECLARE @Database VARCHAR(255)
DECLARE @Table VARCHAR(255)
DECLARE @cmd NVARCHAR(500)
DECLARE @fillfactor INT
SET @fillfactor = 90
DECLARE DatabaseCursor CURSOR FOR
SELECT name FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','msdb','tempdb','model','distribution')
ORDER BY 1
OPEN DatabaseCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
WHILE @@FETCH_STATUS = 0
BEGIN
SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' +
table_name + '']'' as tableName FROM [' + @Database + '].INFORMATION_SCHEMA.TABLES
WHERE table_type = ''BASE TABLE'''
-- create table cursor
EXEC (@cmd)
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @Table
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@@MICROSOFTVERSION / POWER(2, 24) >= 9)
BEGIN
-- SQL 2005 or higher command
SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD WITH (FILLFACTOR = ' + CONVERT(VARCHAR(3),@fillfactor) + ')'
EXEC (@cmd)
END
ELSE
BEGIN
-- SQL 2000 command
DBCC DBREINDEX(@Table,' ',@fillfactor)
END
FETCH NEXT FROM TableCursor INTO @Table
END
CLOSE TableCursor
DEALLOCATE TableCursor
FETCH NEXT FROM DatabaseCursor INTO @Database
END
CLOSE DatabaseCursor
DEALLOCATE DatabaseCursor
Коэффициент заполнения по умолчанию равен 0 (100%), и скрипт в этой статье даст вам то, что вам нужно