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.

Descrivi il problema

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

PHP Caso esemplificativo

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
PHP Caso esemplificativo

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

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.

Richiedi una valutazione

Descrivi la tua situazione: ricevi una valutazione tecnica con fasce orientative di tempi e costi, senza impegno.

Descrivi il problema
Chat