Я уже выяснил и хотел поделиться с вами решением. Сейчас я выбрал функциональный алгоритм, который легче реализовать на SQL, чем императивный.
Слияние:
CREATE OR REPLACE FUNCTION mergesort(A double precision[])
RETURNS double precision[] AS $
SELECT
CASE WHEN 1 < array_length(A,1)
THEN merge(mergesort(A[1:floor((1+array_length(A,1))/2)::integer]),
mergesort(A[floor((1+array_length(A,1))/2)::integer+1:array_length(A,1)]),
1,
1,
ARRAY[]::double precision[])
ELSE A
END;
$ LANGUAGE SQL;
Слияние:
CREATE OR REPLACE FUNCTION merge(A1 double precision[],A2 double precision[], i integer, j integer,acc double precision[])
RETURNS double precision[] AS $
SELECT
CASE WHEN (i > array_length(A1,1) and j > array_length(A2,1)) THEN acc
WHEN i > array_length(A1,1) THEN merge(A1,A2,i,j+1,array_append(acc,A2[j]))
WHEN j > array_length(A2,1) THEN merge(A1,A2,i+1,j,array_append(acc,A1[i]))
WHEN A1[i] < A2[j] THEN merge(A1,A2,i+1,j,array_append(acc, A1[i]))
WHEN A1[i] >= A2[j] THEN merge(A1,A2,i,j+1,array_append(acc, A2[j]))
END;
$ LANGUAGE SQL;
Что-то вроде этого должно помочь:
CREATE UNIQUE CLUSTERED INDEX PK_YourTableName
ON dbo.YourTableName(YourPKFields)
WITH (DROP_EXISTING = ON) ON [NewFilegroup]
Существует два пути; один от SSMS и другого использования TSQL.
От SQL Server 2008 заказывает онлайн:
Перемещать существующий индекс в другую группу файлов или схему выделения разделов
В Обозревателе объектов, подключении к экземпляру Механизма базы данных SQL Server и затем разворачивают тот экземпляр.
Разверните Базы данных, разверните базу данных, которая содержит таблицу с определенным индексом, и затем разверните Таблицы.
Разверните таблицу, которой принадлежит индекс, и затем разверните Индексы.
Щелкните правой кнопкой по индексу, который будет перемещен и затем избранные Свойства.
На диалоговом окне Index Properties выберите страницу устройства хранения данных.
Выберите группу файлов, в которую можно переместить индекс.
Вы не можете переместиться, индексы создали использование ограничения уникального или первичного ключа при помощи диалогового окна Index Properties. Для перемещения этих индексов необходимо отбросить ограничение с помощью ALTER TABLE (Transact-SQL) с опцией DROP CONSTRAINT и затем воссоздать ограничение на желаемую группу файлов с помощью ALTER TABLE (Transact-SQL) с опцией ADD CONSTRAINT.
Если таблица или индекс делятся, выберите схему выделения разделов, в которую можно переместить индекс.
[Пред SQL Server 2008: поместить существующую таблицу в другую группу файлов (SSMS)
Более эффективный путь
создать кластерный индекс на таблице. Если таблица уже имеет кластерный индекс, можно использовать команду CREATE INDEX С пунктом DROP_EXISTING, чтобы воссоздать кластерный индекс и переместить ее в конкретную группу файлов. Когда таблица имеет кластерный индекс, уровень листа индекса и страницы данных таблицы по существу становятся одними и теми же. Таблица должна существовать, где кластерный индекс существует, поэтому если Вы создаете или воссоздаете кластерный индекс — размещение индекса на конкретной группе файлов — Вы перемещаете таблицу в новую группу файлов также.
Кредит: Brian Moran
Можно создать (или воссоздать), кластерный индекс, указывающий новую группу файлов для НА пункте, и это переместит таблицу (данные). Но если Вы не кластеризировали индексы и хотите их на другой группе файлов, необходимо отбросить и воссоздать их также определение новой группы файлов в НА пункте. Касательно.