MySQL 9.7 - Nuove funzionalita'

La nuova versione MySQL 9.7 [NdE Aprile 2026], e' il rilascio LTS (Long Term Support) che raccoglie le evoluzioni delle precedenti release Innovation 9.0, 9.1, ...

In questo documento sono riportati in dettaglio i principali nuovi elementi disponibili nella versione 9.7 riportando consigli ed esempi pratici:

Ma le novita' non sono solo queste... continuate a leggere!

LTS (Long Term Support)

Non e' piu' una novita' ma si prosegue con il rilascio di versioni LTS stabili e con un lungo periodo di supporto [NdA 5 anni di Premier Support dalla data di GA e quindi ulteriori 3 anni di Extended Support]
La versione 9.7 e' la nuova LTS: verra' supportata a lungo e le sue funzionalita' non verranno rimosse.
E' previsto che la prossima LTS sia la versione MySQL 10 preceduta da una serie di Innovation Releases.

Funzionalmente la versione 9.7 non introduce molte novita' rispetto alla precedente LTS 8.4 e quindi l'upgrade non e' urgente, a meno che non abbiate davvero bisogno del VECTOR datatype che presentiamo nel prossimo capitolo.

VECTOR datatype

Con l'esplosione della Generative AI e dei Large Language Models (LLM), la necessita' di memorizzare e interrogare vector embeddings (rappresentazioni numeriche del significato di testi, immagini o audio) e' diventata cruciale.

MySQL 9.7 LTS introduce finalmente il tipo di dato nativo VECTOR e una serie di funzioni helper per calcolare la distanza tra vettori (la base per la ricerca semantica). Sebbene questa funzionalita' arrivi in ritardo rispetto ad altre soluzioni Open Source (come l'estensione pgvector di PostgreSQL), l'implementazione in MySQL 9.7 consente a chi ha gia' un'infrastruttura basata solo su MySQL di muovere i primi passi nell'AI senza dover introdurre tecnologie esterne.

Nell'esempio definiamo una tabella con dati vettoriali, inseriamo alcuni valori (che debbono essere stati opportunamente calcolati da un modello AI apposito) ed infine li interroghiamo:

CREATE TABLE articoli ( id INT AUTO_INCREMENT PRIMARY KEY, titolo VARCHAR(255) NOT NULL, embedding VECTOR(3) NOT NULL ); INSERT INTO articoli (titolo, embedding) VALUES ('Articolo sui Database Relazionali', '[0.12, 0.85, -0.34]'), ('Guida pratica a MySQL 9.7', '[0.15, 0.80, -0.29]'), ('Ricetta per la Pizza Margherita', '[-0.91, 0.05, 0.72]'); SELECT titolo, VECTOR_DISTANCE(embedding, '[0.10, 0.82, -0.31]', 'COSINE') AS distanza FROM articoli ORDER BY distanza ASC LIMIT 2; | titolo | distanza | | --------------------------------- | -------- | | Guida pratica a MySQL 9.7 | 0.0004 | | Articolo sui Database Relazionali | 0.0009 |

Nell'esempio abbiamo utilizzato vettori a tre dimensioni per semplicita' anche se tipicamente le dimensioni sono centinaia e dipendono dal modello scelto, non si tratta di un limite di MySQL.

In questa prima LTS, la gestione dei vettori e' solida dal punto di vista sintattico ma mostra ancora qualche limite sul fronte delle performance. La prima implementazione privilegia la semplicita' di utilizzo. Le tecniche di indicizzazione vettoriale ad alte prestazioni sono ancora meno mature rispetto a quelle disponibili in sistemi specializzati o in estensioni come pgvector. Per piccoli dataset la ricerca lineare (scansione completa) si comporta correttamente.

Ottimizzatore

Dopo un lungo sviluppo e l'introduzione nelle versioni Innovation, l'Hypergraph Optimizer diventa il comportamento predefinito nella nuova LTS.

Nelle query che coinvolgono numerose tabelle in JOIN, il vecchio ottimizzatore valutava le combinazioni in modo lineare, rischiando di non trovare l'ordine di esecuzione ideale o di impiegare troppo tempo a calcolarlo. Il modello a ipergrafo (hypergraph) mappa le relazioni tra le tabelle come nodi e archi complessi, permettendo all'ottimizzatore di:

Il vantaggio principale u' che si tratta di un'ottimizzazione totalmente trasparente. Non e' necessario modificare la sintassi SQL delle query: l'Hypergraph Optimizer analizza il codice esistente e genera piani di esecuzione (visibili tramite il classico comando EXPLAIN) intrinsecamente piu' efficienti, specialmente in contesti di data warehousing o reportistica complessa.

Sicurezza

Da ultimo ma non come ultimo... la sicurezza.

Il cambiamento piu' impattante e' il desupporto del plugin di autenticazione mysql_native_password (introdotto originariamente in MySQL 4.1). Il meccanismo di default e' ora caching_sha2_password, basato sull'algoritmo SHA-256 che e' decisamente piu' sicuro contro gli attacchi brute force.
Per assegnare una nuova password con il plugin corretto la sintassi e':

ALTER USER 'utente'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'nuova_password';

La 9.7 LTS elimina definitivamente numerose variabili di sistema e opzioni di configurazione ereditate dalle versioni precedenti e spesso marcate come deprecate. Inoltre, l'assegnazione dei privilegi e' diventata piu' stringente: non e' piu' possibile utilizzare scorciatoie sintattiche non conformi allo standard SQL ISO per la creazione implicita di utenti tramite i comandi di GRANT.

Varie ed eventuali

Altre novita' interessanti sono:

Un breve riassunto delle funzionalita' introdotte nel tempo si trova su Introduzione a MySQL. MySQL e' in costante evoluzione; ecco le funzionalita' introdotte nelle versioni precedenti: MySQL 8.4, MySQL 8.0, MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0. Per i piu' curiosi sono anche utili il confronto con l'importante fork MariaDB (10.2) e compatibilita' tra versioni MySQL.
Un documento completo con le versioni dei principali software, tra cui MySQL, e' Il tuo server puzza!


Titolo: MySQL 9.7 - Nuove funzionalita'
Livello: Avanzato (3/5)
Data: 1 Aprile 2026
Versione: 1.0.1 - 14 Luglio 2026
Autore: mail [AT] meo.bogliolo.name

-->