Секционирование — различия между версиями
(горизонтальное и методы) |
Gleb-kov (обсуждение | вклад) (вертикальное и индексы) |
||
Строка 8: | Строка 8: | ||
=== Вертикальное === | === Вертикальное === | ||
− | Разбиение таблицы "по столбцам". Условие корректности: | + | Разбиение таблицы "по столбцам". Условие корректности: секции содержат надключ (следует из теоремы Фейгина). |
+ | |||
Преимущества: | Преимущества: | ||
− | + | * Отделение "частых" данных от "редких" | |
+ | * Защита информации (можно задать разные права доступа на разные секции) | ||
+ | * Автоматическая поддержка для CLOB и BLOB (они хранятся отдельно от записи) | ||
Недостатки: | Недостатки: | ||
− | + | * Нет специальной поддержки | |
− | + | * Зависимость от представления | |
− | + | * Необходимость обновляемых представлений | |
− | |||
=== Горизонтальное === | === Горизонтальное === | ||
Разбиение таблицы "по строкам". Условие корректности: каждая строка попадает ровно в одну секцию. | Разбиение таблицы "по строкам". Условие корректности: каждая строка попадает ровно в одну секцию. | ||
+ | |||
Преимущества: | Преимущества: | ||
− | + | * Отделение "близких" данных от "дальних" (например, зависящих от времени). | |
− | + | * Уменьшение размера секции | |
− | + | * Встроенная поддержка | |
− | + | * Прозрачность для пользователя | |
Недостатки: | Недостатки: | ||
− | + | * Возможное замедление работы | |
− | Пример: | + | Пример: таблица Points(SId, CId, Mark, Date), секции разбиты по Date на основе года. |
− | |||
− | |||
== Методы секционирования == | == Методы секционирования == | ||
Строка 59: | Строка 60: | ||
==== Индексы ==== | ==== Индексы ==== | ||
− | Индексы могут быть секционированы. | + | Индексы могут быть секционированы. |
+ | |||
+ | Типы индексов | ||
+ | * Локальный - один на секцию | ||
+ | * Глобальный - один на таблицу | ||
+ | * Секционированный - разбит на секции по-своему | ||
+ | |||
+ | Локальный и глобальный индекс нужны для оптимизации запросов. |
Версия 16:34, 17 декабря 2021
Определение: |
Секционирование — это разделение таблицы базы данных на отдельные фрагменты с раздельными настройками физического хранения. |
Фрагменты могут хранится на разных компьютерах или дисках одного компьютера. Используется в целях повышения производительности и доступности больших баз данных. Это достигается за счет параллельного чтения и записи на различных дисках.
Содержание
Типы секционирования
Вертикальное
Разбиение таблицы "по столбцам". Условие корректности: секции содержат надключ (следует из теоремы Фейгина).
Преимущества:
- Отделение "частых" данных от "редких"
- Защита информации (можно задать разные права доступа на разные секции)
- Автоматическая поддержка для CLOB и BLOB (они хранятся отдельно от записи)
Недостатки:
- Нет специальной поддержки
- Зависимость от представления
- Необходимость обновляемых представлений
Горизонтальное
Разбиение таблицы "по строкам". Условие корректности: каждая строка попадает ровно в одну секцию.
Преимущества:
- Отделение "близких" данных от "дальних" (например, зависящих от времени).
- Уменьшение размера секции
- Встроенная поддержка
- Прозрачность для пользователя
Недостатки:
- Возможное замедление работы
Пример: таблица Points(SId, CId, Mark, Date), секции разбиты по Date на основе года.
Методы секционирования
- Простые
- По диапазонам (задается границами)
- По значениям (списки конкретных значений)
- По хешу (записи разбиваются по хеш значению заданного набора столбцов)
- По выражению (секция задается любым методом простого секционирования)
- Составные (секции ращбиваются на подсекции, например, сначала по диапазону, а затем по хешу)
Управление секциями
Удаление секции
alter table таблица drop partition секция;
Разбиение секции
alter table таблица reorganize секция into (...);
Перехеширование
alter table таблица add partition число; alter table таблица coalesce partition число;
Оптимизация запросов
Оптимизатор запросов умеет использовать секционирование для повышения производительности. Ненужные секции могут быть отброшены, а запросы на оставшихся станут параллельными. Например, может быть оптимизирована операция select со сравнениями, =, in, between.
Индексы
Индексы могут быть секционированы.
Типы индексов
- Локальный - один на секцию
- Глобальный - один на таблицу
- Секционированный - разбит на секции по-своему
Локальный и глобальный индекс нужны для оптимизации запросов.