СУБД. Mysql vs PostgreSQL

СУБД
Алехин Владислав
Mysql vs PostgreSQL

О чем поговорим?

Cравнение функциональности

Функция PostgreSQL 14+ MySQL 8+
CTE Есть Есть
Декларативное секционирование Есть Есть
Полнотекстовый поиск Есть Есть
GIS и SRS Есть Есть
JSON Есть Есть
Логическая репликация Есть Есть
Полусинхронная репликация Есть Есть
Оконные функции Есть Есть
Транзакционный DDL Есть Есть

Процессы и потоки

Процессы Postgresql

Connection pool

PostgreSQL MySQL
PGPool или PgBouncer Сlient-side connection pool

Путь запроса Postgresql

"

Путь запроса MySQL

"

Статистика

Статистика по таблицам

MySQL PostgreSQL
Размер кластерного индекса Размер таблицы
Количество строк Количество строк
  Количество страниц в памяти

Статистика по атрибутам

MySQL PostgreSQL
Распределение данных, в том числе доля NULL-значений Распределение данных, в том числе доля NULL-значений
  Средний размер колонки в байтах
  Количество уникальных значений
  Статистическая корреляция между физическим порядком строк и логическим порядком значений столбца
  Наиболее часто встречаемые значения и их частота

Межаттрибутная статистика

MySQL PostgreSQL
  Функциональные зависимости
  Количество уникальных значений

ACID

ACID

ACID описывает требования к транзакционной системе, обеспечивающие наиболее надёжную и предсказуемую её работу.

MVCC

Multi Version Concurrency Control

UPDATE IN PLACE 1: TABLE

id name notes
1 Alice Great at programming
2 Bob Always talking to alice
3 Eve Listens to everyone's conversations

UPDATE IN PLACE 2: SCAN

id name notes
1 Alice
read
Great at programming
2 Bob Always talking to alice
3 Eve Listens to everyone's conversations

UPDATE IN PLACE 3: UPDATE

id name notes
1 Alice Great at programming
~ update
2
Bob Always talking to alice
3 Eve Listens to everyone's conversations

UPDATE IN PLACE 4: UPDATED

id name notes
1 Alice Great at programming
~ update
2
Bob Working very hard
3 Eve Listens to everyone's conversations

UPDATE IN PLACE 5: INSERT

id name notes
1 Alice Great at programming
2 Bob Working very hard
3 Eve Listens to everyone's conversations
+ insert
4
Dave Very promising new-hire

UPDATE IN PLACE 6: DELETE

id name notes
1 Alice Great at programming
2 Bob Working very hard
- delete
3
Eve Listens to everyone's conversations
4 Dave Very promising new-hire

UPDATE IN PLACE 7

id name notes
1 Alice Great at programming
2 Bob Working very hard
4 Dave Very promising new-hire

UPDATE IN PLACE 8: REALITY

id name notes
1 Alice
read
Great at programming
+ update
2
Bob Working very hard
- delete
3
Eve Listens to everyone's conversations
+ insert
4
Dave Very promising new-hire

MVCC MySQL InnoDB

Cравнение реализацйи MVCC

Индексы

Индексы

Два основных типа архитектур индекса

Связанные понятия

Индексы PostgreSQL

Все индексы являются некластерными (вторичными), так как хранятся в отдельной структуре в табличной куче

Индексы PostgreSQL

Есть поддержка составных, частичных, функциональных

Индексы PostgreSQL

Большой выбор встроенных типов индексов:

Индексы в MySQL

В табличке может быть 1 кластерный и несколько некластерных индексов

Индексы в MySQL

Есть поддержка составных, частичных, но нет поддержки функциональных

Индексы PostgreSQL

Большой выбор встроенных типов индексов:

Алехин Владислав
E-mail: v.alehin@corp.mail.ru
Спасибо за внимание!