SQL-разбиение / слияние табличных разделов: Каков наилучший подход для реализации? - PullRequest
0 голосов
/ 02 октября 2008

Microsoft в своей записи MSDN об изменении разделов SQL 2005 перечислила несколько возможных подходов:

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

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

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

1 Ответ

2 голосов
/ 19 октября 2008

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

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

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

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

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

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