Секционирование — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(горизонтальное и методы)
(вертикальное и индексы)
Строка 8: Строка 8:
  
 
=== Вертикальное ===
 
=== Вертикальное ===
Разбиение таблицы "по столбцам". Условие корректности: TBF
+
Разбиение таблицы "по столбцам". Условие корректности: секции содержат надключ (следует из теоремы Фейгина).
 +
 
 
Преимущества:
 
Преимущества:
- TBF
+
* Отделение "частых" данных от "редких"
 +
* Защита информации (можно задать разные права доступа на разные секции)
 +
* Автоматическая поддержка для CLOB и BLOB (они хранятся отдельно от записи)
  
 
Недостатки:
 
Недостатки:
- TBF
+
* Нет специальной поддержки
 
+
* Зависимость от представления
Пример:
+
* Необходимость обновляемых представлений
- TBF
 
  
 
=== Горизонтальное ===
 
=== Горизонтальное ===
 
Разбиение таблицы "по строкам". Условие корректности: каждая строка попадает ровно в одну секцию.
 
Разбиение таблицы "по строкам". Условие корректности: каждая строка попадает ровно в одну секцию.
 +
 
Преимущества:
 
Преимущества:
- Отделение "близких" данных от "дальних" (например, зависящих от времени).
+
* Отделение "близких" данных от "дальних" (например, зависящих от времени).
- Уменьшение размера секции
+
* Уменьшение размера секции
- Встроенная поддержка
+
* Встроенная поддержка
- Прозрачность для пользователя
+
* Прозрачность для пользователя
  
 
Недостатки:
 
Недостатки:
- Возможное замедление работы
+
* Возможное замедление работы
  
Пример:
+
Пример: таблица Points(SId, CId, Mark, Date), секции разбиты по Date на основе года.
- Таблица Points(SId, CId, Mark, Date)
 
- Секции разбиты по Date на основе года.
 
  
 
== Методы секционирования ==
 
== Методы секционирования ==
Строка 59: Строка 60:
 
==== Индексы ====
 
==== Индексы ====
  
Индексы могут быть секционированы. TBF
+
Индексы могут быть секционированы.
 +
 
 +
Типы индексов
 +
* Локальный - один на секцию
 +
* Глобальный - один на таблицу
 +
* Секционированный - разбит на секции по-своему
 +
 
 +
Локальный и глобальный индекс нужны для оптимизации запросов.

Версия 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.

Индексы

Индексы могут быть секционированы.

Типы индексов

  • Локальный - один на секцию
  • Глобальный - один на таблицу
  • Секционированный - разбит на секции по-своему

Локальный и глобальный индекс нужны для оптимизации запросов.