PostgreSQL или MySQL: какую базу данных выбрать
Основы3 минРедакция Innovialabs
Коротко
Обе базы надёжны и подходят для большинства проектов. PostgreSQL — более богатый выбор для сложной логики, аналитики, JSON и геоданных; MySQL — простой и повсеместно доступный вариант для типовых сайтов, CMS вроде WordPress и нагрузок с простыми запросами.
Короткий ответ
PostgreSQL и MySQL — две самые популярные открытые реляционные СУБД. Обе поддерживают SQL, транзакции, индексы и репликацию, и на обеих работают крупные продукты. Плохого выбора здесь нет, есть более подходящий.
- Выбирайте PostgreSQL, если у проекта сложная бизнес-логика, много отчётов, нужен JSON с индексами, геоданные или расширения.
- Выбирайте MySQL, если проект строится на PHP-CMS (WordPress и подобные), нужен самый доступный хостинг или команда уже хорошо знает MySQL.
Сравнение по возможностям
| Критерий | PostgreSQL | MySQL |
|---|---|---|
| Соответствие стандарту SQL | Строгое, много продвинутых возможностей | Хорошее, исторически более «снисходительное» |
| Типы данных | Массивы, jsonb, диапазоны, UUID, перечисления, пользовательские типы | Стандартный набор, JSON, перечисления |
| JSON | jsonb с GIN-индексами и богатыми операторами | Тип JSON, индексы через сгенерированные столбцы и многозначные индексы |
| Расширения | PostGIS, полнотекстовый поиск, векторы и другие | Меньше, расширяемость ограничена |
| Транзакционные изменения схемы | Да, ALTER TABLE можно откатить | Нет, DDL фиксируется сразу |
| Репликация | Потоковая физическая и логическая | Встроенная через binlog, групповая репликация |
| Лицензия | PostgreSQL License (свободная, разрешительная) | GPL для Community Edition, есть коммерческая версия от Oracle |
Типы данных и JSON
PostgreSQL часто выбирают именно за типы. Можно хранить массив тегов в одном поле, диапазон дат бронирования с проверкой на пересечения, произвольные атрибуты товара в jsonb и при этом искать по ним с индексом.
MySQL тоже умеет работать с JSON: хранить, извлекать поля функциями и индексировать нужные ключи через сгенерированные столбцы. Для простых сценариев этого хватает, но для активной работы с полуструктурированными данными PostgreSQL удобнее.
Производительность
Универсального победителя нет — всё зависит от нагрузки, схемы, индексов и настроек.
- MySQL с движком InnoDB хорошо справляется с большим количеством простых запросов чтения и записи по ключу — типичный профиль веб-сайта.
- PostgreSQL сильнее на сложных запросах: много JOIN, подзапросы, оконные функции, аналитика. Его планировщик и набор типов индексов (B-tree, GIN, GiST, BRIN) дают больше инструментов.
На практике разница от правильных индексов и структуры данных намного больше, чем от выбора между этими двумя СУБД.
Хостинг и экосистема
- Хостинг. MySQL (или совместимая MariaDB) есть практически на любом виртуальном хостинге с панелью управления. PostgreSQL на дешёвом shared-хостинге встречается реже, но на VPS ставится за минуты, а все крупные облака предлагают оба варианта как управляемый сервис.
- CMS и фреймворки. WordPress и многие PHP-CMS рассчитаны на MySQL. Django, Ruby on Rails, Laravel, Node.js-ORM работают с обеими базами, но в Python- и Ruby-сообществах PostgreSQL особенно популярен.
- Инструменты. Для обеих баз есть зрелые клиенты, средства бэкапа, мониторинга и миграций.
Рекомендации по типу проекта
| Тип проекта | Рекомендация |
|---|---|
| Сайт или блог на WordPress | MySQL / MariaDB |
| Интернет-магазин на готовой PHP-платформе | Та база, которую требует платформа, обычно MySQL |
| Собственный интернет-магазин или маркетплейс | PostgreSQL |
| CRM, ERP, учётная система | PostgreSQL |
| SaaS со сложной логикой и отчётами | PostgreSQL |
| Сервис с геоданными, картами, доставкой | PostgreSQL с PostGIS |
| Простое веб-приложение, команда знает MySQL | MySQL |
| Нужен максимально дешёвый shared-хостинг | MySQL |
Частые ошибки при выборе
- Выбирать по старым статьям: обе СУБД заметно развились, многие давние недостатки исправлены.
- Ожидать, что смена базы решит проблемы скорости, когда дело в отсутствии индексов.
- Использовать специфичные функции одной СУБД и потом удивляться сложности переезда.
- Забывать о бэкапах и проверке восстановления — это важнее выбора движка.