Сховище за рядками та партиції

Покращення продуктивності запитів у PostgreSQL

Amy McCarty

Instructor

Типи зберігання в базах даних

Зберігання за рядками

  • Зв'язки між стовпцями збережені

Зберігання за стовпцями

  • Зв'язки між рядками збережені
id name species age habitat received
01 Bob panda 2 Asia 2018
02 Sunny zebra 3 Africa 2018
03 Beco zebra 10 Africa 2017
04 Coco koala 5 Australia 2016
Покращення продуктивності запитів у PostgreSQL

За рядками

Зберігання за рядками

  • Зв'язки між стовпцями збережені

 

id name species age habitat received
01 Bob panda 2 Asia 2018
Покращення продуктивності запитів у PostgreSQL

За стовпцями

Зберігання за стовпцями

  • Зв'язки між рядками збережені  

Дві таблиці. Перша — список id і імен. 01 — Bob. 02 — Sunny. 03 — Beco. 04 — Coco. Друга — ті самі id зі списком видів. 01 — panda. 02 — zebra. 03 — zebra. 04 — koala.

Покращення продуктивності запитів у PostgreSQL

Зберігання за рядками

 

  • Один рядок зберігається разом
  • Швидке додавання або видалення записів
  • Швидко повертає всі стовпці
    • Повільно повертає всі рядки
Покращення продуктивності запитів у PostgreSQL

Зменшення кількості рядків

Зменшити кількість рядків

  • Фільтр WHERE
  • INNER JOIN
  • DISTINCT
  • LIMIT
Покращення продуктивності запитів у PostgreSQL

Методи в базах зберігання за рядками

Партиції

  • Спосіб поділити одну (батьківську) таблицю на багато менших (дочірніх)

Індекси

  • Створення відсортованих ключів стовпців для пришвидшення пошуку

 

Використання партицій та індексів

  • Потребують налаштування й супроводу
  • Про них відомо від адміністратора БД або з документації
Покращення продуктивності запитів у PostgreSQL

Структура партицій

Батьківська таблиця тварин зоопарку з чотирма записами: id, name, species, habitat, received. 01 — Bob — Panda — age — habitat — received. 02 — Sunny — Zebra — 3 — Africa — 2018. 03 — Beco — Zebra — 10 — Africa — 2017. 04 — Coco — Macaw — 5 — South America — 2016. Є 3 дочірні таблиці за стовпцем habitat. У таблиці Asia один запис для Bob. У таблиці Africa два записи для Sunny і Beco. У таблиці South America один запис для Coco.

  • Батьківська таблиця
    • Видима у фронтенді бази даних
    • Пишете запити
  • Дочірні таблиці
    • Не видимі у фронтенді бази даних
    • Пошук виконують запити
Покращення продуктивності запитів у PostgreSQL

Структура партицій

Батьківська таблиця тварин зоопарку з чотирма записами: id, name, species, habitat, received. 01 — Bob — Panda — age — habitat — received. 02 — Sunny — Zebra — 3 — Africa — 2018. 03 — Beco — Zebra — 10 — Africa — 2017. 04 — Coco — Macaw — 5 — South America — 2016. Є 3 дочірні таблиці за стовпцем habitat. У таблиці Asia один запис для Bob. У таблиці Africa два записи для Sunny і Beco. У таблиці South America один запис для Coco. Таблиця Africa виділена червоним.

SELECT species
FROM zoo_animals
WHERE habitat = 'Africa'
Покращення продуктивності запитів у PostgreSQL

Огляд партицій

Що

  • Поділ однієї таблиці на багато менших

Навіщо

  • Гнучкіше зберігання
  • Швидші запити

Де

  • Поширені стовпці для фільтрування
    • Дата, місце
Покращення продуктивності запитів у PostgreSQL

Оцінка запиту з партиціями

Планувальник запитів

Кілька кухарів біля великого казана

EXPLAIN
SELECT species
FROM zoo_animals
WHERE habitat = 'Africa'

План запиту

Seq Scan on zoo_animals  (cost=0.00..
17.70 rows=2 width=182)
  Filter: (state_code = 15)
  • Оцінка вартості (часу)
Покращення продуктивності запитів у PostgreSQL

Давайте потренуємось!

Покращення продуктивності запитів у PostgreSQL

Preparing Video For Download...