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:
- Verifica che il tuo hosting supporti Redis (molti VPS e hosting gestiti lo offrono).
- Installa e attiva il plugin Redis Object Cache.
- Vai su Impostazioni → Redis e clicca “Abilita Object Cache”.
- 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:
- Usa il plugin WP-Optimize per eliminare i transient scaduti e le opzioni orfane.
- 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.
- 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.