MySQL 9.0 Community Edition: Ключевые возможности и улучшения

Источник: «MySQL 9.0 Community Edition: Key Features & Enhancements»
Ознакомьтесь с новыми возможностями и улучшениями в MySQL 9.0 Community Edition, вышедшем 1 июля 2024 года. Обзор охватывает обновления типов данных, производительности и новых возможностей, ориентированных на современные приложения.

Введение

1 июля 2024 года MySQL выпустила версию 9.0 Community Edition, назвав её "Инновационным релизом". Новая версия обещает повышенную производительность, гибкость и новые возможности, призванные удовлетворить динамичные потребности современных приложений. Но оправдает ли она надежды, особенно после бурного приёма MySQL 8.0? Давайте посмотрим, что может предложить MySQL 9.0.

Ключевые возможности и улучшения

Реконструкция словаря данных и типов данных

Одним из основных изменений в MySQL 9.0 является реструктуризация словаря данных и уточнение типов данных. Словарь данных был реорганизован, чтобы лучше обрабатывать операции с метаданными и минимизировать накладные расходы, связанные с операциями со схемой. Усовершенствования типов данных направлены на улучшение валидации данных и создание отчётов об ошибках, особенно в операциях преобразования данных с использованием несовместимых типов. Эта модернизация крайне важна для приложений, использующих различные международные наборы символов, обеспечивая целостность и непротиворечивость данных.

Простой пример взаимодействия с новыми таблицами словаря данных:

-- Создание примера таблицы для демонстрации
CREATE TABLE sample_table (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- Запрос информации в новую организацию словаря данных
SELECT * FROM information_schema.tables WHERE table_name = 'sample_table';

-- Пример, демонстрирующий улучшения в валидации типов данных и создании отчётов об ошибках
CREATE TABLE data_type_example (
numeric_column INT,
string_column VARCHAR(10)
);

-- Попытка вставить несовместимые данные, чтобы увидеть отчёт об ошибке
INSERT INTO data_type_example (numeric_column, string_column) VALUES (123, 'ThisStringIsTooLong');
-- Это приведёт к ошибке, связанной с ограничением длины строки

Более подробную информацию и примеры можно найти в разделах Data Dictionary Notes и Data Type Notes.

Новый тип данных Vector

Введение типа данных VECTOR в MySQL 9.0 знаменует значительное развитие. Эта возможность позволяет пользователям эффективно хранить списки или массивы чисел с плавающей точкой, что особенно важно при анализе данных и научных вычислениях.

Базовый пример использования типа данных VECTOR:

-- Создание таблицы с колонкой/столбцом VECTOR
CREATE TABLE vector_example (
id INT AUTO_INCREMENT PRIMARY KEY,
values VECTOR(100) -- Колонка VECTOR может содержать до 100 значений с плавающей точкой.
);

-- Вставка данных в колонку VECTOR
INSERT INTO vector_example (values) VALUES (TO_VECTOR('[1.0, 2.0, 3.0]'));

-- Получение данных из колонки VECTOR
SELECT id, VECTOR_TO_STRING(values) as vector_values FROM vector_example;

Чтобы узнать больше об этой новой функции, ознакомьтесь с подробным разделом Vector Data Type.

Планировщик событий и JavaScript программы

MySQL 9.0 расширяет возможности планировщика событий для поддержки более сложных операций, повышая уровень автоматизации баз данных. Кроме того, появилась поддержка хранимых процедур и функций на основе JavaScript, что позволяет разработчикам использовать гибкость JavaScript для создания скриптов операций с базами данных.

Пример хранимой JavaScript функции:

-- Создание хранимой JavaScript функции
CREATE FUNCTION gcd(a INT, b INT)
RETURNS INT
NO SQL
LANGUAGE JAVASCRIPT AS
$$
let x = Math.abs(a);
let y = Math.abs(b);
while(y) {
let t = y;
y = x % y;
x = t;
}
return x;
$$;

-- Использование хранимой JavaScript функции
SELECT gcd(48, 18);

Дополнительную информацию по этой теме можно найти в разделе JavaScript Programs.

Улучшения производительности и стабильности

Исправленные ошибки

В MySQL 9.0 исправлен широкий спектр ошибок, что повышает общую надёжность системы баз данных. Среди 127 исправленных проблем заметные улучшения включают удаление устаревшей функциональности, специфичной для функций атомарной записи Fusion IO, и улучшение проблемы Group BY.

Подробный список исправлений можно посмотреть в разделе Bugs Fixed.

Улучшения Performance Schema

В Performance Schema были добавлены две новые таблицы, variables_metadata и global_variable_attributes. Эти таблицы отслеживают системные переменные и пары атрибут-значение, назначенные сервером в глобальные переменные. Такие обновления предоставляют администраторам баз данных и разработчикам лучшие инструменты для мониторинга, устранения неполадок и настройки производительности экземпляров MySQL.

-- Пример использования новых таблиц Performance Schema
SELECT * FROM performance_schema.variables_metadata LIMIT 2;

SELECT * FROM performance_schema.global_variable_attributes LIMIT 2;

Более подробную информацию можно найти в Performance Schema Notes.

Устаревшие функции

В версии MySQL 9.0 объявлено об устаревании нескольких функций, что готовит их к полному удалению в будущих релизах:

Полный список устаревших функций можно найти в разделе Deprecation and Removal Notes.

Подведение итогов

Хотя MySQL 9.0 предлагает значительные инженерные улучшения и несколько новых функций, он может не соответствовать высоким ожиданиям, возлагаемым на "Инновационный релиз". Практические улучшения производительности ещё не полностью подтверждены бенчмарками. Эволюционные шаги, а не революционные изменения, говорят, что MySQL 9.0 — надёжное обновление для тех, кто хочет оставаться в тренде, но, возможно, не заставит тех, кто доволен предыдущими версиями, немедленно переходить на новую.

Заключение

В MySQL 9.0 Community Edition реализованы важные усовершенствования, включая улучшенное управление данными, новый тип данных VECTOR и поддержку программирования на JavaScript. Не будучи революционной, она представляет собой устойчивое развитие MySQL, предоставляя надёжные возможности для разработчиков и администраторов. Тем, кто стремится к стабильности, рекомендуется подождать дальнейших улучшений или выбрать LTS-версию.

Дополнительные материалы

Предыдущая Статья

Зачем нужна типизация массивов в PHP

Следующая Статья

Предоставление определения типа для CSS с @property