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

Откуда: Київ
Сообщений: 10428
Есть таблица, в ней 100 млн записей
Типа такой:

create table t_nodes
(
id unqueidentifier not null primary key,
name varchar(256),
mark_as_deleted int not null default(0)
)


Она мастер, у нее 20 подчиненных.

Хотелось бы сделать partitioning, т.е. те, которые mark_as_deleted >0 помещать в другую партицию.
Думается, что это может сделать выборки быстрее. И удалять физически из раздела, когда будет удобно.

Так вот: как сделать partitioning? какие шаги?

Расцепить таблицы? убить кластерный индекс?
5 ноя 13, 16:10    [15079754]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
switch partition
Guest
1. создать вторую таблицу (уже секционированную) и перелил бы в нее данные балком, затем delete + rename (c удалением/созданием fk)
2. тупо отребилдить с указанием схемы секционирования

не факт что 1 будет быстрее, offline ребилд достаточно быстрая операция
5 ноя 13, 16:29    [15079847]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
Glory
Member

Откуда:
Сообщений: 104760
Winnipuh
Расцепить таблицы? убить кластерный индекс?

Открыть нелюбимый вами хелп
Прочитать про Modifying Partitioned Tables and Indexes - Converting a Nonpartitioned Table to a Partitioned Table
5 ноя 13, 16:30    [15079858]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Glory
Winnipuh
Расцепить таблицы? убить кластерный индекс?

Открыть нелюбимый вами хелп
Прочитать про Modifying Partitioned Tables and Indexes - Converting a Nonpartitioned Table to a Partitioned Table


у меня было смутное подозрение, что такая глава должна быть.... спасибо ;-)
5 ноя 13, 17:13    [15080125]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Winnipuh
Есть таблица, в ней 100 млн записей
Типа такой:

create table t_nodes
(
id unqueidentifier not null primary key,
name varchar(256),
mark_as_deleted int not null default(0)
)


Она мастер, у нее 20 подчиненных.

Хотелось бы сделать partitioning, т.е. те, которые mark_as_deleted >0 помещать в другую партицию.
Думается, что это может сделать выборки быстрее. И удалять физически из раздела, когда будет удобно.

Так вот: как сделать partitioning? какие шаги?

Расцепить таблицы? убить кластерный индекс?


Есть замечание: вместо "mark_as_deleted int" использовать "tinyint".

Во вторых, ваш primary key скорее всего и кластерный индекс.

Я-бы рекоммендовал создать колонку Identity как BIGINT - вы экономите 8 байт на величине индекса и избегаете его фрагментации на вставке.

Возможно насовсем отказываетесь от кластерного индекса, а заменяете его обычным фильтрованым.

Что-то типа такого:
CREATE TABLE t_nodes
(
  ID INT Identity(1,1) not null,
  Name varchar(256),
  Mark_as_deleted tinyint not null default(0)
);
GO
CREATE UNIQUE NONCLUSTERED INDEX UIX_t_nodes ON t_nodes(ID) INCLUDE(Name) WHERE (Mark_as_deleted = 0);
GO


Если ваши активные записи составляют только малый процент, то выигрыш будет очень солидным и вы избавитесь от разбиения таблицы.
5 ноя 13, 19:49    [15080865]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
2 SandalTree

увы, понимаю, но не могу избавиться от гуида, таблицы с данными, и еще и подчиненные связаны по гуиду.
А по поводу индекса - поэкспериментирую.
Активных записей больше, чем отмеченных как удаленные.
5 ноя 13, 19:58    [15080894]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
все такие тупые, да?
Guest
SandalTree,

типа чел от нечего делать выбрал себе uniqueidentifier, а не bigint identity?
а ну как туда сливаются данные с разных систем, где у каждого своя нумерация и надо ее поддерживать?
5 ноя 13, 19:59    [15080898]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
все такие тупые, да?
SandalTree,

типа чел от нечего делать выбрал себе uniqueidentifier, а не bigint identity?
а ну как туда сливаются данные с разных систем, где у каждого своя нумерация и надо ее поддерживать?


Кто его знает, может ещё не всё было потеряно.

Если активных записей большинство, то разбиение таблицы ничего не даст. Прирост производительности будет почти нулевой.
Скорее всего и фильтрация индекса не сильно поможет, зато возрастут накладные расходы на его поддержание.
6 ноя 13, 01:13    [15082109]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
SandalTree
Если активных записей большинство, то разбиение таблицы ничего не даст. Прирост производительности будет почти нулевой.
Судя по словам ТС, записей с mark_as_deleted >0 будет подавлюящее большинство, намного больше активных, а условие по mark_as_deleted будет во всех запросах.

Если при этом ещё сложные остальные условия (запросы), и как следствие частые сканы, то получится очень даже хорошо.
6 ноя 13, 09:19    [15082410]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
Гость333
Member

Откуда:
Сообщений: 3683
alexeyvg
Судя по словам ТС, записей с mark_as_deleted >0 будет подавлюящее большинство, намного больше активных

Хм?
слова ТС
Активных записей больше, чем отмеченных как удаленные.
6 ноя 13, 11:28    [15083176]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28146
Вопрос к ТСу: Где тормоза?

Приведи пример тормозного запроса.

Можно-ли хоть как-то сгруппировать записи или заранее подготовить вьюхи?
7 ноя 13, 04:26    [15088591]     Ответить | Цитировать Сообщить модератору
 Re: Partitioning существующей таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
Гость333
Хм?
слова ТС
Активных записей больше, чем отмеченных как удаленные.
Пропустил :-(

Да, тогда вообще о чём разговор, зачем это разбиение таблицы...
7 ноя 13, 09:03    [15088820]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить