Guida completa per migliorare l’efficienza delle query nel database di WordPress

Leggere in 3 minuti.
2026-03-16
2026-06-06
2,163
Guadagno delle commissioni quando fai acquisti tramite i link qui sotto, senza alcun costo aggiuntivo per te.

Guida completa per migliorare l’efficienza delle query nel database di WordPress

Il database rappresenta la base di un sito web WordPress: tutti i contenuti, i dati degli utenti e le impostazioni vengono memorizzati al suo interno. Con l’aumento del contenuto del sito, le query al database inefficaci possono diventare il principale fattore che rallenta le prestazioni del sito e influisce negativamente sull’esperienza dell’utente. L’efficienza delle query al database è direttamente correlata alla velocità di caricamento delle pagine e al consumo delle risorse del server, e influisce in modo indiretto anche sulla raccolta dei dati da parte dei motori di ricerca e sulla posizione del sito nelle loro classifiche.

La generazione di una pagina WordPress può richiedere decine, se non centinaia, di interazioni con il database. Pertanto, l’ottimizzazione delle query del database rappresenta un aspetto fondamentale e particolarmente efficace nell’ambito dell’ottimizzazione delle prestazioni del sito web. Di seguito verrà spiegato in modo sistematico, da diversi punti di vista, come migliorare l’efficienza delle query del database in WordPress.

Comprendere il ciclo di vita delle query sul database di WordPress

Per ottimizzare in modo efficace, è necessario prima comprendere come vengono generate ed eseguite le query in WordPress. Una richiesta di query tipica attraversa diverse fasi chiave: dall’invio alla elaborazione fino al restituzione dei risultati, e in ciascuna di queste fasi esistono opportunità per migliorare le prestazioni del sistema.

Si consiglia di leggere Come utilizzare un tema WordPress per creare un sito web aziendale efficiente e attraente dal punto di vista estetico?

La classe di oggetti di query integrata in WordPress

Nello strato di esecuzione principale, WordPress utilizza principalmente…WP_QueryQuesta classe viene utilizzata per gestire varie query di dati. È fondamentale per la creazione del contenuto delle pagine (come articoli, pagine personalizzate, tipi di articoli specifici). Ad esempio, il contenuto della pagina principale, delle pagine di categoria e delle liste di articoli è in gran parte generato da questa classe.WP_QueryÈ guidato da esempi concreti. Incapsula il processo complesso di creazione di istruzioni SQL; gli sviluppatori possono definire i criteri di ricerca utilizzando un array di parametri.

UltaHost – Hosting per siti WordPress
Garanzia di rimborso entro 30 giorni, larghezza di banda illimitata e accesso ai database, protezione gratuita contro gli attacchi DDoS; sconto del 50% per l’acquisto di un piano valido per 3 anni (da 3 a 4 TB di spazio di archiviazione).
$args = array(
    'post_type' => 'post',
    'posts_per_page' => 10,
    'category_name' => 'news'
);
$query = new WP_Query($args);

Mecanismo di cache per i risultati delle query

WordPress include un meccanismo di cache per gli oggetti, progettato per ridurre le richieste ripetute al database. Quando si utilizza…get_post()get_term_by()Quando vengono richieste funzioni del genere, WordPress tenta innanzitutto di recuperare i dati dalla cache.

Il cuore di questo cache è…WP_Object_CacheClasse. Tuttavia, è importante notare che, per impostazione predefinita (ovvero in assenza dell’installazione di un plugin per la cache persistente), tale cache è “non persistente” e esiste soltanto per il periodo di vita di una singola richiesta di pagina. Ciò significa che, la prossima volta che l’utente accede al sito, la cache non è più valida e le query devono essere eseguite nuovamente sul database. Per ottenere un notevole miglioramento delle prestazioni, è generalmente necessario utilizzare un backend di cache di oggetti persistente, come Redis o Memcached, e integrarlo con plugin specifici (ad esempio Redis Object Cache).WP_Object_CacheConnessione.

Strumenti comuni per analizzare le query lente

La posizionamento sul web è il primo passo verso l’ottimizzazione di un sito web. Lo strumento più diretto per farlo è fornito da WordPress.SAVEQUERIESDebug the constant. Definiscila come…trueWordPress memorizza tutte le query SQL eseguite, nonché il tempo impiegato per ciascuna di esse, in un array globale.

// 在 wp-config.php 中添加
define('SAVEQUERIES', true);
// 页面底部(如footer.php)检查查询
if (current_user_can('administrator')) {
    global $wpdb;
    print_r($wpdb->queries);
}

Inoltre, molti plugin professionali per il monitoraggio delle query, come Query Monitor, offrono un’interfaccia più intuitiva per visualizzare tutte le query, la loro origine (plugin o tema), il tempo di esecuzione, e permettono di evidenziare le query lente, rappresentando quindi uno strumento efficace per l’ottimizzazione degli ambienti di sviluppo. Per gli ambienti di produzione, è consigliabile abilitare il registro delle query lente (Slow Query Log) del server database (ad esempio MySQL) per un monitoraggio continuo.

Si consiglia di leggere Guida completa a WooCommerce: crea il tuo sito e-commerce professionale da zero.

Pratiche di ottimizzazione a livello di codice sorgente

Il codice rappresenta la base per l’efficienza delle query. Sia nello sviluppo di temi che di plugin, seguire le migliori pratiche permette di evitare problemi di prestazioni fin dall’inizio.

Utilizzare correttamente le funzioni delle API principali

WordPress offre un insieme ricco e ottimizzato di funzioni API, che dovrebbero essere utilizzate preferibilmente al posto di scrivere direttamente codice SQL. Ad esempio, per ottenere gli articoli appartenenti a una determinata categoria, è possibile fare riferimento a queste funzioni API.
Esempio contrario (inefficace): utilizzo diretto.$wpdb->get_results()Ecco il SQL originale, che potrebbe ignorare il meccanismo di cache:
Esempio positivo (efficace): UtilizzoWP_Queryo le funzioni che lo incapsulano.get_posts()Utilizza automaticamente la cache, e le sue prestazioni sono mantenute dal team principale.

Nel corso di un ciclo, è consigliabile evitare l’uso di elementi o tecniche che potrebbero causare problemi o ridurre l’efficienza dell’esecuzione del codice.get_post_meta()的函数进行大量查询。正确的做法是,在初始化WP_QueryIn quel momento, attraverso…'meta_query'Utilizzare i parametri per effettuare la filtrazione, oppure…update_postmeta_cacheFunzionalità correlata: è possibile ottenere tutti i metadati degli articoli in una sola volta.

hosting.com Hosting condiviso
Prestazioni elevate con CPU AMD EPYC, storage SSD NVMe e LiteSpeed, supporto interno di esperti 24 ore su 24, 7 giorni su 7, misure di sicurezza avanzate, tra cui SSL, brute force, malware e protezione DDoS, risparmi fino a 73%

L’implementazione dell’API Transients per il caching di dati a breve termine

Per le query costose che richiedono un basso livello di reattività in tempo reale (ad esempio, i risultati delle chiamate a API esterne o i dati di calcolo complessi), è consigliabile utilizzare l’API Transients di WordPress per il caching. Il suo funzionamento principale consiste nel memorizzare i dati in un database (o in un cache basato su oggetti, se disponibile), associandoli a un nome chiave specifico insieme a un tempo di scadenza.
Ad esempio, si può memorizzare in cache un elenco di articoli popolari:

$popular_posts = get_transient('mytheme_popular_posts');
if (false === $popular_posts) {
    // 如果缓存不存在或已过期,执行复杂查询
    $args = array('meta_key' => 'view_count', 'orderby' => 'meta_value_num', 'posts_per_page' => 5);
    $popular_posts = new WP_Query($args);
    // 缓存查询结果12小时(43200秒)
    set_transient('mytheme_popular_posts', $popular_posts, 43200);
}

Ottimizzare la creazione di query personalizzate

Quando è necessario utilizzarlo…$wpdbQuando si eseguono query personalizzate su una classe, è necessario rispettare rigorosamente le norme di sicurezza e utilizzare i metodi ausiliari appropriati. Assicurarsi di utilizzare…$wpdb->prepare()Esegui i preparativi necessari per l’interrogazione, al fine di prevenire gli attacchi di tipo SQL injection e di garantire che i dati vengano correttamente “escapati” (cioè che i caratteri speciali vengano convertiti in forme sicure per l’elaborazione).

global $wpdb;
$user_id = 123;
$results = $wpdb->get_results(
    $wpdb->prepare(
        "SELECT * FROM {$wpdb->prefix}custom_table WHERE user_id = %d AND status = %s",
        $user_id,
        'active'
    )
);

Allo stesso tempo, è necessario assicurarsi che sui campi della tabella di query siano presenti gli indici appropriati.JOINoperativo o complessoWHERELe clausole, in questo caso, sono particolarmente importanti.

Si consiglia di leggere Il guida definitiva all’ottimizzazione di WordPress: strategie complete per migliorare la velocità e la sicurezza del sito web

Ottimizzare le query grazie a plugin avanzati e servizi esterni

Quando l’ottimizzazione del codice raggiunge un punto di stallo, è possibile utilizzare strumenti e servizi consolidati per ottenere ulteriori miglioramenti delle prestazioni.

Attivare la cache persistente degli oggetti.

Questo è uno dei metodi più efficaci per i siti web con un elevato traffico. Installando server Redis o Memcached, insieme ai relativi plugin per WordPress (come “Redis Object Cache” o “Memcached Redux”), è possibile migliorare notevolmente le prestazioni del sito.WP_Object_CacheI dati vengono memorizzati nella memoria.
Questo rende possibile il caching delle richieste tra le pagine. Ad esempio, una volta che un frammento HTML di un articolo popolare viene generato e memorizzato in cache, tutte le richieste successive da parte degli utenti vengono lette direttamente dalla memoria, evitando completamente l’esecuzione del codice PHP e le query al database. Dopo aver impostato correttamente questa funzionalità, noterete una riduzione significativa del numero di query effettuate.

Hosting condiviso InterServer
Hosting condiviso $2,50 USD al mese, primo mese $0,1 USD codice promozionale tryinterserver, 461 script di applicazioni cloud, installazione con un clic.

Utilizzare la paginazione e il caricamento lento (lazy loading).

Lo scorrimento infinito o il caricamento di un gran numero di articoli può generare richieste di dati molto onerose dal sistema. È quindi necessario prestare attenzione a questo aspetto e gestirlo in modo appropriato.WP_QueryUsare in modo saggio e appropriato.'posts_per_page'Insieme ai parametri di paginazione, è necessario evitare che vengano richieste centinaia o migliaia di record in una sola volta. Per liste lunghe o gallerie di immagini, è consigliabile attivare la tecnologia di caricamento differito (Lazy Load), che permette di caricare i contenuti che non sono visibili all’interno della finestra di visualizzazione soltanto quando sono necessari, riducendo notevolmente la pressione sul database durante il caricamento iniziale della pagina.

Si potrebbe considerare l’opportunità di introdurre una copia della database in modalità “lettura sola” (read-only).

Per siti WordPress di grandi dimensioni in cui le operazioni di lettura sono molto più frequenti di quelle di scrittura (ad esempio, portali di notizie), si può considerare l’implementazione della replicazione master-slave del database. Tutte le operazioni di scrittura (pubblicazione di articoli, commenti) vengono indirizzate al database principale, mentre la maggior parte delle operazioni di lettura viene distribuita su uno o più database secondari in lettura sola. Questa soluzione richiede l’uso di plugin o una personalizzazione approfondita per separare le attività di lettura da quelle di scrittura; presenta quindi un certo livello di complessità tecnica. Tuttavia, permette di aumentare notevolmente la capacità del database di gestire simultanee richieste di lettura.

Ottimizzazione della configurazione del server e del database

Alla fine, tutte le query vengono eseguite sui server MySQL o MariaDB. L’ottimizzazione della configurazione del server rappresenta la base per garantire un’esecuzione efficiente delle query.

Regolazioni dei parametri chiave per il miglioramento delle prestazioni di MySQL

Nel file di configurazione del server database (ad esempio…)my.cnfIn questo contesto, ci sono diversi parametri che sono fondamentali per le prestazioni di WordPress.innodb_buffer_pool_size(Larghezza della cache InnoDB) Dovrebbe essere impostata tra il 70% e l’80% della memoria disponibile (es. 70-80 TB). Questo valore determina quanta quantità di dati e indici il database può memorizzare in cache nella memoria.query_cache_size(Verifica della dimensione della cache): Sebbene questa funzionalità sia stata rimossa nelle versioni successive a 8.0, nelle versioni più antiche era utile in scenari in cui le query semplici venivano eseguite con elevata frequenza.max_connectionsÈ necessario impostare i parametri in modo appropriato per supportare sia le connessioni al server web che le connessioni di backup.

Eseguire regolarmente la manutenzione del database.

Durante l’utilizzo di WordPress, vengono generati molti dati ridondanti, come versioni corrette dei contenuti, bozze, commenti in attesa di approvazione, nonché dati temporanei che scadono. Questi dati aumentano inutilmente le dimensioni dei database e riducono l’efficienza delle query. È possibile utilizzare periodicamente plugin come “WP-Optimize” o “Advanced Database Cleaner” per pulire il database. Inoltre, eseguendo operazioni di ottimizzazione (“OPTIMIZE TABLE”) o riparazione (“REPAIR TABLE”) sui database, è possibile ordinare i frammenti dei file di dati e migliorare l’efficienza delle operazioni di lettura/scrittura (I/O). Si consiglia di eseguire tali operazioni durante i periodi di minore traffico, utilizzando phpMyAdmin o la riga di comando.

Creare indici efficienti per le tabelle del database

Queste sono ottimizzazioni fondamentali a livello del database. Gli indici, simili ai contenuti di un indice di un libro, aiutano l’engine del database a localizzare i dati in modo rapido. Prima di tutto, è necessario assicurarsi che i tabelli principali di WordPress (soprattutto…)wp_postswp_postmetawp_commentsGli indici dei chiavi primarie e secondarie presenti su quei dati sono completi. Inoltre, per quei valori che compaiono frequentemente…WHEREORDER BYJOINI campi presenti nelle condizioni (ad esempio…)post_statuspost_typecomment_post_IDmeta_keyIn questo caso, è necessario valutare se sia necessario aggiungere un indice ordinario o un indice composto. L’aggiunta di un indice può essere effettuata tramite i comandi SQL disponibili in phpMyAdmin, ad esempio:

ALTER TABLE wp_postmeta ADD INDEX idx_meta_key (meta_key(50));

Attenzione: L’aggiunta di un indice occupa spazio disco aggiuntivo e influisce leggermente sulla velocità di scrittura; è quindi necessario valutare attentamente i pro e i contro prima di procedere.

Riassumendo

Ottimizzare le query del database di WordPress è un processo sistematico che richiede un approccio coordinato da quattro punti di vista: diagnosi, codifica, strumenti e gestione operativa. Il percorso di azione più efficace consiste innanzitutto nell’utilizzare strumenti appropriati per individuare con precisione le query lente; in secondo luogo, durante lo sviluppo, è fondamentale rispettare rigorosamente le specifiche delle API principali e le regole di caching, evitando codice inefficace; successivamente, è opportuno introdurre sistemi di caching basati su oggetti persistenti per ottenere miglioramenti immediati delle prestazioni; infine, è necessario effettuare configurazioni appropriate sul server del database e mantenere il sistema in modo corretto, creando indici efficaci per le tabelle più grandi. Grazie a questa serie di ottimizzazioni, anche i siti WordPress con un gran numero di contenuti possono garantire query veloci e risposte immediate, offrendo un’esperienza di accesso fluida sia agli utenti che ai motori di ricerca.

FAQ - Domande frequenti

WordPress中“瞬态”数据存储在哪里?

La posizione in cui vengono memorizzati i dati forniti dall’API Transients di WordPress dipende dalle impostazioni effettuate. Se il sito non ha abilitato la cache di oggetti persistenti (ad esempio, Redis), i dati temporanei (transient data) verranno salvati nel database.wp_optionsNella tabella (a)…_transient_Se il caching degli oggetti persistenti è abilitato, i dati transienti vengono memorizzati in primo luogo nella cache di memoria (ad esempio, in Redis). Questo permette velocità di lettura e scrittura estremamente elevate e riduce notevolmente la pressione sul database.

Come pulire in batch i dati transitori scaduti?

I dati transienti scaduti a volte non vengono automaticamente eliminati. È possibile utilizzare plugin dedicati alla pulizia del database (ad esempio WP-Optimize), che di solito offrono la possibilità di eliminare tutti i dati transienti scaduti con un semplice clic. In alternativa, se si è sicuri della sicurezza delle operazioni, è possibile eseguire direttamente comandi SQL in phpMyAdmin per eliminare i dati transienti scaduti.

DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%';

È normale che il numero di query diminuisca significativamente dopo l’attivazione della cache degli oggetti in Redis?

È del tutto normale, ed è proprio il principale risultato dell’attivazione della cache persistente per gli oggetti. La diminuzione del numero di query indica che una grande quantità di dati (come menu, articoli, risultati di ricerca) viene ottenuta direttamente dalla memoria (Redis), evitando così le richieste al database. Questo riduce notevolmente il carico di lavoro sul processore (CPU) e sugli interventi di I/O del server del database, rappresentando un chiaro segno di miglioramento delle prestazioni. Puoi verificare con il plugin Query Monitor che la percentuale di “hit nella cache” è aumentata in modo significativo.

Su quali campi dei database dovrebbero essere creati gli indici?

Per creare un indice, è necessario seguire i principi di frequenti interrogazioni e elevata capacità di filtraggio. È importante prestare attenzione ai campi che vengono spesso utilizzati per le ricerche, l’ordinamento e le associazioni dei dati. In WordPress, i campi tipici candidati per l’indicizzazione includono:wp_poststabellarepost_typepost_statusCombinazione (spesso utilizzata per cercare articoli pubblicati)wp_postmetatabellaremeta_key(Spesso utilizzato per filtrare i dati in base a specifici metadati), nonchéwp_commentstabellarecomment_post_ID(Per associare articoli e commenti.) Prima di aggiungere l’indice, è consigliabile analizzare i log delle query lente in dettaglio.