Menu
Performance e Ottimizzazione

Come ridurre le query al database in WordPress

Gianluca Gentile · · 5 min di lettura

Come ridurre le query al database in WordPress

Ogni volta che un visitatore carica una pagina del tuo sito, WordPress esegue decine o centinaia di query al database MySQL per recuperare contenuti, impostazioni, dati dei plugin e metadati. Più query significano più tempo di caricamento e più carico sul server. Ridurre le query al database è una delle ottimizzazioni più efficaci per velocizzare WordPress, soprattutto su hosting condivisi o siti ad alto traffico.

Quante query esegue WordPress?

Un’installazione WordPress pulita esegue circa 20-30 query per pagina. Ma con temi complessi e diversi plugin attivi, il numero può facilmente salire a 100-300 query per pagina. Per vedere quante query esegue il tuo sito, aggiungi questo codice al file functions.php del tema (solo temporaneamente, per debug):

add_action('wp_footer', function() {
    echo '<!-- Query: ' . get_num_queries() . ' in ' . timer_stop() . ' secondi -->';
});

Questo mostra il numero di query e il tempo di esecuzione in un commento HTML nel codice sorgente della pagina. In alternativa, il plugin Query Monitor offre un pannello dettagliato con tutte le query, il tempo di ciascuna e il plugin o tema che le ha generate.

Identificare i plugin che generano troppe query

Installa Query Monitor e naviga le pagine del sito. Per ogni pagina vedrai:

  • Il numero totale di query.
  • Il tempo impiegato per ciascuna query.
  • Il componente che ha generato la query (core, tema o plugin specifico).
  • Le query lente (evidenziate) che impiegano più di 0.05 secondi.
  • Le query duplicate che vengono eseguite più volte identiche.

Spesso scoprirai che un singolo plugin è responsabile di 30-50 query in più per pagina. Se quel plugin non è essenziale, disattivalo o cercane un’alternativa più leggera.

Attivare l’Object Cache con Redis o Memcached

L’Object Cache è la soluzione più efficace per ridurre le query. WordPress ha un sistema di cache interno che salva i risultati delle query in memoria durante la singola richiesta. Ma con un persistent object cache come Redis o Memcached, i risultati vengono salvati tra una richiesta e l’altra.

Con Redis attivo, molte query al database vengono sostituite da letture dalla memoria RAM, che sono centinaia di volte più veloci. Il risultato tipico: da 200 query a 30-40, con un risparmio di tempo significativo.

Per attivare Redis:

  1. Verifica che il tuo hosting supporti Redis (molti VPS e hosting gestiti lo offrono).
  2. Installa e attiva il plugin Redis Object Cache.
  3. Vai su Impostazioni → Redis e clicca “Abilita Object Cache”.
  4. Verifica che lo stato sia “Connesso”.

Ottimizzare le query della tabella wp_options

La tabella wp_options è una delle più interrogate: WordPress la legge per ogni richiesta per caricare le impostazioni del sito, dei plugin e del tema. Con il tempo, questa tabella accumula dati inutili:

  • Transient scaduti: dati temporanei di plugin che non vengono puliti automaticamente.
  • Opzioni di plugin disinstallati: molti plugin lasciano dati nella tabella anche dopo la disinstallazione.
  • Opzioni autoload inutili: ogni opzione con autoload=’yes’ viene caricata a ogni richiesta, anche se non serve.

Per pulire la tabella:

  1. Usa il plugin WP-Optimize per eliminare i transient scaduti e le opzioni orfane.
  2. Controlla le opzioni con autoload attivo: in phpMyAdmin esegui SELECT * FROM wp_options WHERE autoload = ‘yes’ ORDER BY LENGTH(option_value) DESC per trovare le opzioni più pesanti caricate automaticamente.
  3. Disattiva l’autoload per opzioni di plugin che non servono a ogni richiesta.

Limitare le revisioni degli articoli

WordPress salva ogni revisione di ogni articolo nel database. Un articolo modificato 50 volte ha 50 revisioni nella tabella wp_posts, ognuna con i rispettivi metadati. Questo gonfia il database e rallenta le query.

Per limitare le revisioni, aggiungi a wp-config.php:

define('WP_POST_REVISIONS', 5);

Questo mantiene solo le ultime 5 revisioni per articolo. Per eliminare le revisioni vecchie, usa WP-Optimize o WP-Sweep.

Disattivare funzionalità non necessarie

Alcune funzionalità di WordPress generano query che potresti non aver bisogno:

  • Heartbeat API: invia richieste AJAX al server ogni 15-60 secondi nell’admin. Il plugin Heartbeat Control permette di ridurre la frequenza o disattivarla nelle pagine dove non serve.
  • Emoji: WordPress carica script per le emoji che generano query aggiuntive. Puoi disattivarli con un plugin di ottimizzazione o con un semplice snippet nel functions.php.
  • Pingback e trackback: se non li usi, disattivali in Impostazioni → Discussione per eliminare le query relative.

Usare la cache delle query nei plugin di caching

I plugin di caching come WP Rocket, FlyingPress e LiteSpeed Cache salvano l’intera pagina HTML generata. Quando la pagina è in cache, WordPress non esegue alcuna query al database per servirla: il file HTML statico viene inviato direttamente al browser. Questo porta le query da centinaia a zero per i visitatori non loggati.

Assicurati che il caching delle pagine sia attivo e funzionante per ottenere il massimo beneficio.

Serve assistenza?

Se il tuo sito WordPress è lento a causa di troppe query al database, il team di SoccorsoWP può analizzare le prestazioni, identificare i colli di bottiglia e ottimizzare il database per la massima velocità. Apri un ticket e velocizza il tuo sito.

Condividi:

Lascia un commento