Секционирование — различия между версиями
 (горизонтальное и методы)  | 
				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.
Индексы
Индексы могут быть секционированы.
Типы индексов
- Локальный - один на секцию
 - Глобальный - один на таблицу
 - Секционированный - разбит на секции по-своему
 
Локальный и глобальный индекс нужны для оптимизации запросов.