2008-10-01 2 views
0

Microsoft в MSDN entry об изменении SQL 2005 разделов перечислены несколько возможных подходов:SQL-разделение/объединение табличных разделов: каков наилучший подход к реализации?

  • Создать новую разделенную таблицу с нужной функцией разбиения, а затем вставить данные из старой таблицы в новую таблицу, используя инструкцию INSERT INTO ... SELECT FROM.
  • Создайте секционированный кластеризованный индекс в куче
  • Удалите и перестройте существующий секционированный индекс, используя оператор CREATE INDEX Transact-SQL с предложением DROP EXISTING = ON.
  • Выполните последовательность инструкций ALTER PARTITION FUNCTION.

Любая идея, какой будет наиболее эффективный способ для крупномасштабного БД (миллионы записей) с разделами на основе дат записей (что-то вроде ежемесячных разделов), где данные распространяются более 1-2 лет?

Кроме того, если в основном я получаю доступ к последней информации (для чтения), будет ли смысл хранить раздел за последние X дней, а все остальные данные будут другим разделом? Или лучше ли разделять остальные данные (для любого произвольного доступа на основе диапазона дат)?

ответ

2

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

Я выполнил разбиение на таблицы строк 300-500 м с данными, распространенными в течение 6-7 лет, и этот подход с табличной вставкой был тем, который я нашел наиболее полезным.

Вы спрашивали о том, как разбить - лучший ответ - попытаться создать свои разделы, чтобы ваши запросы попали в один раздел. Если вы склонны концентрировать запросы на последние данные, И если вы фильтруете это поле даты в своих предложениях, то да, у вас есть отдельный раздел для последних X дней.

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

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

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