Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Массовый перенос индексов  [new]
mamakanec
Member

Откуда:
Сообщений: 1
Подскажите как можно перенести массово индексы некластеризованные в файловую группу?
27 янв 15, 06:04    [17174471]     Ответить | Цитировать Сообщить модератору
 Re: Массовый перенос индексов  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
...WITH (DROP_EXISTING = ON) ON [NewFG]
27 янв 15, 09:06    [17174668]     Ответить | Цитировать Сообщить модератору
 Re: Массовый перенос индексов  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
mamakanec,

Если позволяет версия сервера (2005 и выше), то можно составить скрипт с помощью DMV sys.tables,sys.indexes, sys.Index_columns + то что написал Алексей.

Если лень разбираться, то можете использовать (или взять за основу) скрипт отсюда: Moving indexes from one filegroup to another in SQL Server
Правда я его не тестировал, так что не ручаюсь :)
27 янв 15, 10:10    [17174884]     Ответить | Цитировать Сообщить модератору
 Re: Массовый перенос индексов  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
mamakanec,

select 
'CREATE '+CASE i.is_unique WHEN 1 THEN ' UNIQUE ' ELSE '' END +' NONCLUSTERED INDEX ' + QUOTENAME(i.name) + ' ON ' + QUOTENAME(SCHEMA_NAME(o.schema_id))+'.'+ QUOTENAME(o.name) +
'
( ' + Columns.[Normal] + ' ) ' +
CASE WHEN Columns.[Included] IS NULL THEN '' ELSE '
INCLUDE ( ' + ISNULL(Columns.[Included],'') + ')' END +

CASE WHEN i.filter_definition IS NULL THEN '' ELSE '
WHERE ' + ISNULL(i.filter_definition,'') END
+ '
WITH (SORT_IN_TEMPDB = ON, DROP_EXISTING = ON, ONLINE = ON, FILLFACTOR ='+CAST(i.fill_factor AS NVARCHAR(5))+') ON [INDEX_GROUP]
GO;'
,isnull(i.filter_definition, '') as index_filter
from sys.indexes i 
join sys.objects o on i.object_id = o.object_id
cross apply
(
    select
        substring
        (
            (
                select ', ' + QUOTENAME(co.[name])
                from sys.index_columns ic
                join sys.columns co on co.object_id = i.object_id and co.column_id = ic.column_id
                where ic.object_id = i.object_id and ic.index_id = i.index_id and ic.is_included_column = 0
                order by ic.key_ordinal
                for xml path('')
            )
            , 3
            , 10000
        )    as [Normal]    
        , substring
        (
            (
                select ', ' + QUOTENAME(co.[name])
                from sys.index_columns ic
                join sys.columns co on co.object_id = i.object_id and co.column_id = ic.column_id
                where ic.object_id = i.object_id and ic.index_id = i.index_id and ic.is_included_column = 1
                order by ic.key_ordinal
                for xml path('')
            )
            , 3
            , 10000
        )    as [Included]    

) Columns
where o.[type] = 'U' --USER_TABLE
AND i.[type_desc] = 'NONCLUSTERED'
order by o.[name], i.[name], i.is_primary_key DESC

переносит некластерные индексы в группу [INDEX_GROUP]. доп. параметры допилите сами, если надо.
27 янв 15, 16:03    [17177684]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить