2016-12-27 4 views
1

Я использую таблицу switch sometime on SQL Server 2008 для быстрой передачи данных между двумя таблицами, но я не знаю, как это работает, и какая разница между этим просто insert into T2 select * from T1.Как работает переключатель таблицы на сервере sql?

Кто-то может объяснить подробно, как это работает и какая разница?

Кроме того, я замечаю, что если обе таблицы не являются клонами, это утверждение не работает. Например, если у меня есть один индекс в одной таблице, а не в другой, он терпит неудачу.

+2

Я не смотрел на заднем конце, чтобы сказать наверняка, но я понимаю, 'SWITCH' работать, просто обновляя ссылки раздела, а не физически перемещать данные. Если в вашем примере это будет делать копия всех данных в новую таблицу. [Связанная статья MSDN.] (Https://technet.microsoft.com/en-us/library/ms191160 (v = sql.105) .aspx) – Siyual

ответ

4

Вставка данных с помощью оператора

insert into T2 select * from T1 

загружает данные путем вставки данных из T1 в T2. Когда раздел передается (переключается), данные физически не перемещаются; изменяются только метаданные о местоположении данных.

Прежде чем перейти разделы, некоторые общие требования должны быть выполнены:

Общих требования для коммутации Перегородки

Когда раздел передается, данные физически не перемещаются; изменяются только метаданные о местоположении данных. Прежде чем вы сможете переключаться между разделами, необходимо выполнить несколько общих требований:

Обе таблицы должны существовать до операции SWITCH. Таблица, из которой перемещается раздел (исходная таблица), и таблица, которая получает раздел (целевая таблица), должны существовать в базе данных до того, как вы выполните операцию переключения.

Принимающий раздел должен существовать и должен быть пустым. Если вы добавляете таблицу в качестве раздела в уже существующую секционированную таблицу или перемещаете раздел из одной секционированной таблицы в другую, раздел, который получает новый раздел, должен существовать, и он должен быть пустым.

Принимающая нераспределенная таблица должна существовать и должна быть пустой. Если вы переадресовываете раздел для формирования одной несвязанной таблицы, таблица, которая получает новый раздел, должна существовать, и это должна быть пустая нераспределенная таблица.

Перегородки должны находиться в одной колонке. Если вы переставляете раздел из одной секционированной таблицы в другую, обе таблицы должны быть разделены на один столбец.

Исходные и целевые таблицы должны совместно использовать одну и ту же файловую группу. Исходная и целевая таблица оператора ALTER TABLE ... SWITCH должны находиться в одной и той же файловой группе, а их столбцы с большим значением должны храниться в одной и той же файловой группе. Любые соответствующие индексы, индексные разделы или индексированные разделы просмотра также должны находиться в одной и той же файловой группе. Тем не менее, файловая группа может отличаться от файловой группы соответствующих таблиц или других соответствующих индексов.

Эта информация и многое другое находится здесь:

https://technet.microsoft.com/en-us/library/ms191160(v=sql.105).aspx

+0

Хороший ответ! Спасибо. – Maik

Смежные вопросы