1632
правки
Изменения
м
TBFРазбиение таблицы «по столбцам». Условие корректности: секции содержат надключ (следует из теоремы Фейгина). Преимущества:* Отделение «частых» данных от «редких»* Защита информации (можно задать разные права доступа на разные секции)* Автоматическая поддержка для CLOB и BLOB (они хранятся отдельно от записи) Недостатки:* Нет специальной поддержки* Зависимость от представления* Необходимость обновляемых представлений
TBFРазбиение таблицы «по строкам». Условие корректности: каждая строка попадает ровно в одну секцию. Преимущества:* Отделение «близких» данных от «дальних» (например, зависящих от времени).* Уменьшение размера секции* Встроенная поддержка* Прозрачность для пользователя Недостатки:* Возможное замедление работы Пример: таблица Points(SId, CId, Mark, Date), секции разбиты по Date на основе года.
TBC==== Оптимизация запросов ====Оптимизатор запросов умеет использовать секционирование для повышения производительности. Ненужные секции могут быть отброшены, а запросы на оставшихся станут параллельными. Например, может быть оптимизирована операция '''select''' со сравнениями, '''=''', '''in''', '''between'''. ==== Индексы ==== Индексы могут быть секционированы. Типы индексов:* Локальный — один на секцию* Глобальный — один на таблицу* Секционированный — разбит на секции по-своему Локальный и глобальный индекс нужны для оптимизации запросов. Секционированный индекс имеет смысл, если глобальный индекс слишком велик по размеру. Секционирование таблицы и индекса должено быть согласовано, чтобы не относить секцию таблицы к нескольким секциям индекса. Однако разрешается относить несколько секций таблицы к одной секции индекса. == Литература ==* [https://www.postgresql.org/docs/current/ddl-partitioning.html PostgreSQL: Table Partitioning]* [https://dev.mysql.com/doc/refman/8.0/en/partitioning.html MySQL: Partitioning] [[Категория: Базы данных]]
rollbackEdits.php mass rollback
|definition =
'''Секционирование''' — это разделение таблицы базы данных на отдельные фрагменты с раздельными настройками физического хранения.}}
Фрагменты могут хранится на разных компьютерах или дисках одного компьютера. Используется Секционирование используется в целях повышения производительности и доступности больших баз данных. Это достигается за счет параллельного чтения и записи на различных дисках, а также работы оптимизатора запросов.
== Типы секционирования ==
=== Вертикальное ===
=== Горизонтальное ===
== Методы секционирования ==
* Простые
** По диапазонам(задается границами)** По значениям(списки конкретных значений)** По хешу(записи разбиваются по хеш значению заданного набора столбцов)* По выражению(секция задается любым методом простого секционирования)* Составные** По (секции разбиваются на подсекции, например, сначала по диапазону и , а затем по хешу)** ..При попытке записи значения, которое не попадает ни в одну секцию, происходит ошибка.
== Управление секциями ==
Управление секционированием не входит в стандарт SQL, поэтому для различных баз данных приведенные запросы могут иметь отличный синтаксис.
==== Удаление секции ====
==== Разбиение секции ====
Разбиение одной секции на несколько. Получаемые секции должны быть согласованы, например, исходный диапазон полностью разбивается на несколько поддиапазонов.
'''alter table''' <font color=red>таблица</font> '''reorganize''' <font color=red>секция</font> '''into ('''...''')''';
==== Перехеширование ====
В случе секционирования по хешу можно изменить количество бакетов, но нельзя повлиять на размещение записей по бакетам.
'''alter table''' <font color=red>таблица</font> '''add partition''' <font color=red>число</font>''';'''
'''alter table''' <font color=red>таблица</font> '''coalesce partition''' <font color=red>число</font>''';'''