Разделение SQL-сервера - PullRequest
1 голос
/ 26 марта 2010

У меня есть таблица с миллионами записей, и мы смотрим на реализацию разбиения таблицы. Глядя на это, у нас есть внешний ключ «GroupID», на который мы хотели бы разбить раздел. Это возможно?

В группу будет добавлено больше записей, поэтому при добавлении новых идентификаторов групп можно ли динамически создавать раздел?

Ответы [ 2 ]

1 голос
/ 26 марта 2010

Идентификатор группы может быть не лучшим элементом для разбиения, поскольку разбиение подходит для эффекта скользящего окна и больше предназначено для удаления устаревших данных и добавления новых данных.

Группируя по идентификатору, вы позволяете только добавлять / удалять группы, например, нет элемента времени / долговечности данных. Существует также жесткое ограничение в 1000 разделов на таблицу разделов, ограничивающее вас до 1000 групп. Поскольку вы намереваетесь добавить идентификаторы групп, а они не указываются в качестве статического номера, вы потенциально можете достичь этого жесткого предела.

Единственный способ увеличить этот предел до 1000 - это разместить многораздельное представление между несколькими многораздельными таблицами.

Вопрос, который я хотел бы задать, состоит в том, что вызывает добавление новых данных / удаление старых данных и на каком основании это делается. Тот факт, что таблица состоит из миллионов строк, не делает ее непосредственным кандидатом на разбиение, поэтому я и задаю вопрос.

С точки зрения их динамического добавления - эта функция не существует, вам придется написать хранимые процедуры и логику для обработки выделения новых файловых групп / установки следующих используемых и разделения функции разделения. Это можно сделать, но SQL не собирается делать это за вас.

1 голос
/ 26 марта 2010

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

SQL Enterprise 2005 и выше:

В SQL 2005 и выше встроена прозрачная поддержка разбиения, если вы используете редакцию SQL для разработчиков или корпоративную версию. Динамическое добавление большего количества разделов означает, что вам нужно будет создать новую функцию разделения, новые схемы разделов и, возможно, новые файловые группы.

Вы можете изменить функцию разделения, используя SPLIT:

ALTER PARTITION FUNCTION MyPartitionFunction ()
SPLIT RANGE (2);

SQL 2000 или SQL 2005 и более поздних версий:

В противном случае вы все еще можете использовать разбиение, но вам нужно сделать это по-старому, как MS SQL 2000. По старинке вы должны физически создавать много таблиц, а затем просматривать их как UNION ALL каждой из таблиц. Таким образом, вам нужно знать схему заранее.

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

Однако существуют некоторые ограничения, ваш столбец разделения должен быть частью вашего первичного ключа. И чтобы делать вставки непосредственно в View, вам НЕ нужно иметь столбец Identity (который автоматически увеличивается с помощью MS SQL)

...