Query MySQL lenta: come individuarla e velocizzarla
Se un report, una ricerca o una pagina del gestionale impiega diversi secondi (o minuti) a caricarsi, puoi inviare la richiesta: spesso pochi interventi mirati riportano i tempi sotto il secondo.
Tempo tecnico indicativo
2–8 ore
Fascia di costo orientativa
80–450 €
Complessità tipica
Media
In cosa consiste il problema
Una query che funzionava bene con poche migliaia di righe può diventare lentissima con milioni di record. Il database è costretto a leggere intere tabelle, a ordinare grandi quantità di dati in memoria o a ripetere sottoquery per ogni riga.
Il primo passo è misurare: individuare le query più costose (slow query log) e leggerne il piano di esecuzione con EXPLAIN, invece di aggiungere indici a caso.
Cause frequenti
- Indici mancanti o sbagliati: filtri e join su colonne non indicizzate o indici nell'ordine sbagliato.
- Funzioni sulle colonne: WHERE YEAR(data) = ... impedisce l'uso dell'indice.
- Subquery correlate: eseguite una volta per ogni riga della query principale.
- SELECT *: lettura di colonne pesanti non necessarie.
- Configurazione: buffer pool sottodimensionato rispetto ai dati.
Come si risolve
- Misura: slow query log e EXPLAIN / EXPLAIN ANALYZE.
- Indici composti mirati: progettati sulle condizioni reali delle query.
- Riscrittura: join al posto di subquery, filtri compatibili con gli indici.
- Aggregazioni: tabelle di riepilogo per report storici.
Un esempio tipico
Il report vendite di un gestionale impiega due minuti. EXPLAIN mostra una scansione completa della tabella ordini, filtrata con una funzione sulla data, e una subquery ripetuta per ogni cliente. Riscrivendo il filtro per intervallo di date, sostituendo la subquery con una join e aggiungendo un indice composto, il report torna sotto il secondo.
Scenario illustrativo, non riferito a un cliente reale.
Quando serve uno sviluppatore
Quando la lentezza blocca altri utenti o quando gli indici aggiunti senza analisi peggiorano le scritture.
Tecnologie coinvolte
Quanto tempo può richiedere e quanto può costare
Indicativamente 2–8 ore di lavoro tecnico, per una fascia di 80–450 €.
Le variabili che incidono di più:
- dimensione delle tabelle
- numero di query da analizzare
- possibilità di modificare il codice applicativo
- accesso a dati realistici
Le fasce di prezzo e di tempo indicate sono orientative e dipendono da complessità, qualità del codice esistente, accessi disponibili, documentazione e requisiti effettivi. Non costituiscono preventivo.
Informazioni da preparare
- Testo della query o pagina lenta
- Dimensione delle tabelle
- Versione di MySQL/MariaDB
- Dump anonimizzato o accesso a una copia
Problemi simili
- Ottimizzare un database MySQL o MariaDB Database MySQL lento o instabile nei picchi? Configurazione, indici, connessioni e manutenzione per…
- SQL Server lento: diagnosi di query, indici e deadlock Gestionale su SQL Server lento o con timeout? Diagnosi con Query Store e DMV, indici, statistiche…
- Sviluppatore PostgreSQL: progettazione, ottimizzazione e migrazioni Esperto PostgreSQL per query lente, migrazione da MySQL o SQL Server, replica, backup e ricerca…
Correggere errore 500 su applicazione PHP dopo aggiornamento del server
Dopo che l'hosting ha aggiornato la versione di PHP, il gestionale interno mostra una pagina bianca con errore 500 su quasi tutte le pagine. Il login funziona…
- Fascia orientativa
- 80–250 €
- Tempo tecnico
- 1–4 ore
Convertire un sito PHP statico in un piccolo CMS gestibile
Il nostro sito è fatto di pagine PHP con i testi scritti nel codice: per cambiare una news o un orario dobbiamo chiamare un programmatore. Vorremmo poter…
- Fascia orientativa
- 500–1.300 €
- Tempo tecnico
- 10–24 ore
Aggiornare applicazione da PHP 7.4 a PHP 8.3
Il nostro portale clienti gira ancora su PHP 7.4, non più supportato. Il fornitore di hosting ci ha comunicato che entro qualche mese la versione verrà…
- Fascia orientativa
- 900–2.400 €
- Tempo tecnico
- 16–40 ore
Creare API REST per esporre il catalogo prodotti ai rivenditori
Vorremmo permettere ai nostri rivenditori di leggere in automatico il catalogo prodotti, i prezzi riservati e la disponibilità di magazzino, invece di inviare…
- Fascia orientativa
- 350–900 €
- Tempo tecnico
- 6–16 ore
Domande frequenti
Basta aggiungere un indice?
A volte sì, ma un indice sbagliato non aiuta e rallenta le scritture: va scelto leggendo il piano di esecuzione.
Serve un server più potente?
Raramente come prima soluzione: una query ottimizzata è spesso decine di volte più veloce, a costo zero di hardware.
Contenuto revisionato il 05/10/2026.