MySQL 8 — что нового?

Восьмая версия популярной СУБД находится в активной разработке уже более года, уже было выпущено несколько DR релизов, однако это событие в сети освещается очень слабо, несмотря на то, что релиз несет в себе огромное количество изменений. Так чего же нам ждать от новой версии MySQL?

Первое, что сразу бросается в глаза — пропускаются версии 6 и 7. Да, изменится нумерация релизов, это уже входит в моду (nodejs, php, …). Но и у разработчиков из Oracle конечно же тоже были на это свои причины.

Закат MyISAM

Все системные таблицы уже переведены на InnoDB. Также представлены изменения, которые накладывают ограничения на использование MyISAM в новой версии — например нельзя просто взять и скопировать MyISAM таблицы на запущенный MySQL сервер, они не будут распознаны. В InnoDB уже реализовали все фичи, которые считались преимуществами MyISAM, и из последних осталось лишь то, что таблицы MyISAM заимают меньше места на диске и запросы count(*) отрабатывают намного быстрее. К тому же InnoDB получил целый ряд новых возможностей, например настройка innodb_dedicated_server, которая позволяет автоматически устанавливать значения для innodb_buffer_pool_sizeinnodb_log_file_size и innodb_flush_method в зависимости от памяти на сервере.

Улучшения словаря данных

MySQL Server теперь включает транзакционный словарь данных, который хранит информацию о объектах базы данных. В предыдущих версиях MySQL данные словаря хранились в файлах метаданных и в непереходных таблицах. Подробней об изменениях в словаре данных можно почитать здесь.

Улучшения JSON функционала

Все мы помним про новый функционал для работы с JSON в MySQL которые появились в версии 5.7 (Испытываем новые JSON возможности в MySQL 5.7 и Использование JSON в MySQL). В восьмой версии этот функционал значительно расширится. Например добавлен оператор ->>, который является эквивалентом вызова JSON_UNQUOTE() на результате JSON_EXTRACT(). Функции аггрегирования JSON_ARRAYAGG() и JSON_OBJECTAGG(), добавлена возможность частичного обновления JSON колонки (что эффективней чем полное удаление текущего значения и запись нового), добавлена возможность использования диапазонов в XPath выражениях, функция JSON_MERGE() и много другое.

Оптимизатор

Добавлены невидимые и нисходящие индексы. Невидимые не используются оптимизатором, но позволяют протестировать изменение производительности от удаления индекса. И теперь при определении индекса ключ DESC больше не игнорируется, вместо этого индексы будут хранится в обратном порядке, что может быть эффективней в некоторых случаях.

Роли

Новая заманчивая возможность восьмой версии — теперь можно создавать свои роли и закреплять за ними нужные привилегии. Например

CREATE ROLE 'developer_role';
GRANT SELECT ON database.* TO 'developer_role';
GRANT 'developer_role' TO 'user'@'localhost';

Кодировка по умолчанию

Все знают, что в версиях 5.x кодировкой по умолчанию является latin1, однако начиная с версии 8.0.0 стандартной кодировкой будет utf8mb4. Теперь можно будет не переживать за сохранность emoji и других мультибайтовых символов.

И это далеко не все изменения, с полным списком вы можете ознакомиться на сайте продукта. И бесконечно радует то, что всем известный и всеми любимый продукт активно развивается и не растворился среди сотен других СУБД. Ну и напоследок объемная презентация, для тех кто лучше усваивает информацию в таком виде ?