Vai al contenuto
BeoHosting
BeoHosting
WordPress

Guida alle tabelle del database di WordPress

BeoHosting Team··10 min read di lettura
Guida alle tabelle del database di WordPress

Introduzione al database di WordPress

La soluzione CMS WordPress utilizza un database MySQL o MariaDB per memorizzare praticamente tutto sul tuo sito - dagli articoli e dalle pagine ai commenti, ai dati degli utenti, alle impostazioni e alle configurazioni dei plugin. Comprendere la struttura del database è fondamentale per l'amministrazione avanzata di un sito WordPress, per la risoluzione dei problemi, l'ottimizzazione delle prestazioni e i backup corretti. Ogni installazione di WordPress crea 12 tabelle predefinite che insieme costituiscono il sistema completo di gestione dei contenuti.

Il prefisso predefinito per le tabelle di WordPress è wp_, ma è consigliabile cambiare il prefisso durante l'installazione per motivi di sicurezza, perché gli attaccanti che tentano attacchi di SQL injection prendono spesso di mira il prefisso standard wp_. Cambiandolo in qualcosa come bh29_ rendi più difficili gli attacchi automatizzati. In questa guida usiamo il prefisso standard wp_ per chiarezza, ma tieni presente che il tuo sito potrebbe usare un prefisso diverso.

wp_posts - il cuore di WordPress

Struttura della tabella

La tabella wp_posts è la più importante del database di WordPress, perché memorizza tutti i contenuti, inclusi articoli, pagine, file multimediali allegati, revisioni, voci di menu e custom post type. Ogni riga della tabella rappresenta un oggetto di contenuto con colonne come ID, che è un identificatore univoco, post_author, che fa riferimento all'utente che ha creato il contenuto, post_date per la data di creazione, post_content per il contenuto principale in formato HTML, post_title per il titolo, post_excerpt per la descrizione breve, post_status per lo stato (publish, draft, pending, private, trash) e post_type per il tipo di contenuto.

I tipi di post in wp_posts

La colonna post_type determina il tipo di contenuto. Il valore post indica gli articoli del blog, page indica le pagine, attachment indica i file multimediali caricati, revision memorizza le versioni precedenti dei contenuti, nav_menu_item memorizza le voci del menu di navigazione e i custom post type hanno il proprio slug. Questo significa che nella stessa tabella puoi avere migliaia di articoli, centinaia di pagine, migliaia di file multimediali e decine di migliaia di revisioni. Le revisioni sono una causa comune di database gonfio, perché WordPress per impostazione predefinita memorizza un numero illimitato di revisioni per ogni articolo.

Ottimizzare wp_posts

Limita il numero di revisioni aggiungendo la costante WP_POST_REVISIONS nel file wp-config.php. Il valore 5 mantiene le ultime 5 revisioni per ogni articolo, il che è sufficiente per la maggior parte dei siti. Elimina periodicamente le vecchie revisioni, gli articoli auto-draft e gli articoli eliminati dal cestino usando il plugin WP-Optimize o una query SQL diretta. Per i siti con un gran numero di articoli, l'indicizzazione delle colonne post_type e post_status velocizza le query. Se usi i custom post type con WP_Query, specifica sempre post_type nella query per evitare la scansione dell'intera tabella.

wp_postmeta - i metadati dei contenuti

Struttura e scopo

La tabella wp_postmeta memorizza i dati aggiuntivi sui contenuti non coperti dalle colonne di wp_posts. La struttura è un modello EAV (Entity-Attribute-Value) con quattro colonne - meta_id, post_id, che fa riferimento a wp_posts, meta_key, che è il nome del metadato, e meta_value, che è il valore. In questa tabella ACF (Advanced Custom Fields) memorizza tutti i custom field, WooCommerce memorizza i prezzi e gli attributi dei prodotti, e WordPress memorizza l'ID dell'immagine in evidenza, il file del template, i dati serializzati e molto altro.

Il problema di wp_postmeta

La tabella wp_postmeta è la causa più comune di problemi di prestazioni, perché cresce molto rapidamente. Ogni articolo può avere decine o centinaia di voci meta. ACF aggiunge almeno due righe per campo (valore e riferimento), WooCommerce aggiunge da 20 a 50 voci meta per prodotto, e ogni plugin può aggiungere le proprie voci meta. Un sito con 1.000 articoli può facilmente avere 100.000 righe o più in wp_postmeta. Un indice mancante o non ottimale sulla colonna meta_key è una causa comune di query lente.

Ottimizzare wp_postmeta

Aggiungi un indice sulla colonna meta_key se non esiste, perché l'indice predefinito di WordPress su questa colonna ha una lunghezza limitata. Usa il plugin WP-Optimize o Advanced Database Cleaner per identificare ed eliminare le voci meta orfane appartenenti ad articoli eliminati. Per le query meta_query frequenti, valuta la creazione di una tabella personalizzata anziché usare wp_postmeta, perché una tabella personalizzata con colonne specifiche è molto più veloce del modello EAV. Evita di memorizzare grandi array serializzati in meta_value, perché non possono essere interrogati in modo efficiente.

wp_options - le impostazioni del sito

Struttura e contenuto

La tabella wp_options memorizza tutte le impostazioni del sito WordPress, inclusi il nome del sito, l'URL, l'email dell'amministratore, il tema attivo, i plugin attivi, la struttura dei permalink, il fuso orario e centinaia di altre impostazioni. Ogni plugin e tema può aggiungere le proprie righe a wp_options per memorizzare la configurazione. La colonna autoload con valore yes o no determina se l'opzione viene caricata automaticamente a ogni richiesta o solo quando viene richiesta specificamente.

Il problema dell'autoload

WordPress carica in memoria tutte le opzioni con autoload=yes a ogni richiesta. Se hai molti plugin, questa tabella può avere centinaia di opzioni in autoload con una dimensione totale di diversi megabyte. Questo consuma RAM e rallenta ogni richiesta, anche per le pagine che non usano quelle opzioni. Controlla la dimensione totale delle opzioni in autoload con una query SQL che somma la dimensione di option_value per tutte le righe in cui autoload è yes. Se il risultato supera 1 MB, hai un problema da risolvere.

Pulire wp_options

I plugin che sono stati rimossi spesso lasciano le proprie opzioni nella tabella, perché WordPress non ha un meccanismo di pulizia automatica. I dati transient, che sono cache temporanea, vengono memorizzati in wp_options con chiavi che iniziano con _transient_ e possono accumulare migliaia di righe. Usa un plugin come Advanced Database Cleaner per identificare le opzioni dei plugin eliminati e i transient obsoleti. Manualmente puoi cambiare autoload in no per le opzioni usate raramente con una query SQL in phpMyAdmin, ma fai attenzione a non modificare le opzioni core di WordPress.

wp_users e wp_usermeta

Dati degli utenti

La tabella wp_users memorizza i dati di base degli utenti, inclusi ID, user_login per il nome utente, user_pass per la password con hash, user_nicename per la versione del nome adatta agli URL, user_email, user_url per il sito web dell'utente, user_registered per la data di registrazione, user_activation_key per l'attivazione dell'account e user_status. WordPress usa l'hashing phpass per le password con un numero regolabile di iterazioni per proteggere dagli attacchi di forza bruta sugli hash.

I metadati degli utenti

La tabella wp_usermeta ha la stessa struttura EAV di wp_postmeta e memorizza dati aggiuntivi degli utenti come il ruolo utente in wp_capabilities, il livello di accesso in wp_user_level, le preferenze del pannello di amministrazione, la disposizione dei widget della dashboard e tutti i custom field degli utenti. WooCommerce aggiunge gli indirizzi di spedizione e fatturazione come meta utente. I plugin di membership e LMS possono aggiungere decine di voci meta per utente. Per i siti con molti utenti, wp_usermeta può diventare una tabella molto grande.

Tabelle dei commenti e dei link

wp_comments e wp_commentmeta

La tabella wp_comments memorizza tutti i commenti agli articoli, con colonne per l'ID del commento, post_id per il collegamento all'articolo, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_content, comment_approved per lo stato di approvazione, comment_parent per le risposte ai commenti e user_id per gli utenti registrati. I commenti spam sono contrassegnati con comment_approved=spam ma restano nella tabella finché non li elimini. Il plugin Akismet e strumenti anti-spam simili usano wp_commentmeta per memorizzare i punteggi di spam e altri metadati.

wp_terms, wp_termmeta e wp_term_taxonomy

WordPress usa tre tabelle per le tassonomie. La tabella wp_terms memorizza i termini stessi con ID, name per il nome, slug per l'URL e term_group per il raggruppamento. La tabella wp_term_taxonomy collega i termini alle tassonomie e memorizza il tipo di tassonomia, la descrizione, l'ID padre per la gerarchia e count per il numero di articoli. La tabella wp_term_relationships è una tabella di join che collega gli articoli ai termini con le colonne object_id per l'ID dell'articolo e term_taxonomy_id. La tabella wp_termmeta aggiunge la possibilità di memorizzare metadati per i termini, come l'immagine o il colore di una categoria.

Ottimizzazione del database di WordPress

Manutenzione regolare

Il database di WordPress richiede una manutenzione regolare per prestazioni ottimali. Le azioni chiave includono l'eliminazione delle revisioni degli articoli più vecchie di 30 giorni, la pulizia degli articoli auto-draft e di quelli nel cestino, l'eliminazione dei commenti spam e nel cestino, la rimozione dei transient scaduti da wp_options, l'ottimizzazione delle tabelle con il comando OPTIMIZE TABLE e il controllo dell'integrità delle tabelle con CHECK TABLE. Il plugin WP-Optimize automatizza tutte queste operazioni con la possibilità di pianificare una pulizia settimanale o mensile.

Indici e prestazioni

Gli indici sono fondamentali per query più veloci sul database. WordPress crea indici predefiniti, ma per i siti con un gran numero di articoli o con query personalizzate, indici aggiuntivi possono migliorare significativamente le prestazioni. Usa EXPLAIN prima di una query SQL in phpMyAdmin per vedere se la query usa gli indici o esegue una scansione completa della tabella. Per le query meta_query frequenti su una specifica meta_key, aggiungi un indice composito sulle colonne post_id e meta_key in wp_postmeta. Il plugin WordPress Query Monitor mostra tutte le query SQL di una pagina con i tempi di esecuzione e identifica le query lente.

Dimensione del database

Monitora regolarmente la dimensione del database, perché un database gonfio rallenta i backup, le migrazioni e le operazioni quotidiane. Il database di un blog WordPress medio dovrebbe essere inferiore a 100 MB. Se il tuo database supera i 500 MB, probabilmente hai un problema con revisioni, transient o dati dei plugin. I siti WooCommerce con molti prodotti e ordini hanno naturalmente database più grandi, ma anche in quel caso devi ripulire i dati obsoleti. In BeoHosting i nostri piani di hosting offrono spazio sufficiente per il database, ma un database ottimizzato significa un sito più veloce per i tuoi visitatori.

Backup del database di WordPress

Metodi di backup

Esistono diversi modi per eseguire il backup del database di WordPress. La funzione di export di phpMyAdmin ti permette di scaricare manualmente un file dump SQL con tutte le tabelle e i dati. Il comando WP-CLI wp db export crea un file dump dalla riga di comando, adatto all'automazione. Plugin WordPress come UpdraftPlus, BackWPup e All-in-One WP Migration offrono backup automatici pianificati con caricamento su cloud storage come Google Drive, Dropbox o Amazon S3. In BeoHosting eseguiamo backup automatici giornalieri dell'intero account di hosting, database incluso, con ripristino con un clic in cPanel.

Best practice per il backup

Esegui un backup prima di ogni aggiornamento di WordPress, del tema o di un plugin. Conserva i backup in più posizioni, non solo sullo stesso server. Verifica periodicamente il ripristino dei backup in un ambiente di staging per confermare che siano corretti. Automatizza i backup giornalieri con una policy di conservazione di almeno 30 giorni. Per i siti e-commerce con transazioni frequenti, valuta backup ogni 6 o 12 ore. Cripta i backup che contengono dati sensibili come informazioni sugli utenti o dati di pagamento.

Argomenti avanzati

Tabelle Multisite

Un'installazione WordPress Multisite crea tabelle aggiuntive per la gestione della rete di siti. La tabella wp_blogs contiene informazioni su ogni sito della rete, wp_site memorizza i dati della rete e wp_sitemeta memorizza i metadati della rete. Ogni sito della rete ottiene il proprio set di tabelle con un prefisso che include l'ID del sito, come wp_2_posts per il secondo sito, wp_3_options per il terzo sito e così via. Questo significa che un'installazione Multisite con 10 siti ha oltre 120 tabelle nel database.

Tabelle personalizzate

Per i plugin e i temi con requisiti specifici sui dati, creare tabelle personalizzate è spesso meglio che usare wp_postmeta. Una tabella personalizzata con colonne e indici specifici è drasticamente più veloce per le query rispetto al modello EAV di wp_postmeta. Usa la funzione WordPress dbDelta per creare e aggiornare le tabelle personalizzate, perché confronta automaticamente la struttura esistente con quella desiderata e applica solo le modifiche necessarie. Registra l'attivazione del plugin con register_activation_hook per creare le tabelle durante l'installazione del plugin e fornisci un hook di disinstallazione per la pulizia quando il plugin viene eliminato.

Conclusione

Comprendere le tabelle del database di WordPress è una conoscenza fondamentale per ogni serio amministratore e sviluppatore WordPress. Le tabelle wp_posts e wp_postmeta memorizzano tutti i contenuti, wp_options memorizza la configurazione, e wp_users e wp_usermeta memorizzano i dati degli utenti. Una manutenzione regolare del database, attraverso l'eliminazione di revisioni inutili, transient e dati orfani, mantiene il sito veloce. Un'indicizzazione corretta velocizza le query e backup regolari proteggono i dati dalla perdita. In BeoHosting i nostri server MySQL ottimizzati e i backup automatici offrono una base affidabile per il tuo sito WordPress, con un supporto che conosce i database a fondo.

BeoHosting Team

10+ anni di esperienza — Specialisti di web hosting e infrastrutture

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Ultimo aggiornamento: