Секционирование

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

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

Аппаратное секционирование

Аппаратное секционирование позволяет выиграть за счет архитектуры аппаратного обеспечения. Ниже перечислены примеры аппаратного секционирования.

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

  • Устройства RAID (массив независимых дисков с избыточностью), позволяющие разместить данные на нескольких дисках и обеспечивающие более быстрый доступ к данным, поскольку данные одновременно считываются и записываются несколькими головками. Как правило, если разбить таблицу на несколько дисков, она будет сканироваться быстрее. Кроме того, хранение связанных таблиц на отдельных дисках может значительно улучшить производительность запросов, где используется соединение этих таблиц. Дополнительные сведения см. в разделе RAID.

Горизонтальное секционирование

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

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

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

Дополнительные сведения см. в разделе Секционированные таблицы и индексы.

Вертикальное секционирование

При вертикальном секционировании таблица делится на несколько таблиц, содержащих меньшее количество столбцов. Существует два типа вертикального секционирования: нормализация и разбиение строк.

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

  • При разбиении строк первоначальная таблица просто делится на таблицы с меньшим количеством столбцов. Каждая логическая строка в разбитой таблице соответствует логической той же строке в других таблицах, идентифицируемой столбцом UNIQUE KEY, который одинаков во всех секционированных таблицах. Например, если соединить строку с ID 712 из каждой разбитой таблицы, то получится исходная строка.

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

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