WordPress: Quelques opérations sur la base de données

Voici quelques requêtes trouvées ici et là, et qui permettent de faire un peu de ménage dans la base de données de votre blog WordPress.

  • Ne faîtes aucune opérations sur la base de données, sans en avoir réalisé préalablement, une sauvegarde complète.

Nettoyer les tables des commentaires

Si vous recevez beaucoup de spams, les tables wp_comments, et wp_commentmeta peuvent grossir assez vite, pour devenir complètement disproportionnées par rapport à la taille du blog (et des autres tables).

Normalement, les extensions gérant les spams (comme Akismet), effectuent régulièrement un nettoyage de cette table. Malgré tout, il peut rester quelques informations inutiles.

Pour effacer les spams de la table des commentaires:

DELETE FROM wp_comments WHERE comment_approved = "spam"

Pour effacer les commentaires que vous avez refusé :

DELETE FROM wp_comments WHERE comment_approved = "0"

La requête suivante efface toutes les méta-valeurs des commentaires qui n’existent plus. Elle est à utiliser après l’exécution des requêtes précédentes:

DELETE FROM wp_commentmeta WHERE comment_id NOT IN (SELECT comment_id FROM wp_comments)

Je n’avais jamais fait cette opération auparavant, et la requête à supprimer presque la moitié des lignes de la table wp_commentmeta.

Changement d’adresse mail pour les commentaires

Même si vous changez l’adresse mail qui figure dans la page Réglages / General, vous recevrez encore des messages sur l’ancienne adresse, simplement parce que WordPress conserve, dans sa base, l’adresse que vous avez utilisé pour chacun des commentaires:

Si vous souhaitez effectuer la transition plus rapidement, voici une requête qui permet de changer l’adresse mail dans tous les commentaires du blog:

UPDATE wp_comments SET comment_author_email="nouvelle adresse"
WHERE comment_author_email="ancienne adresse 1" OR comment_author_email="ancienne adresse 2"

Effacement de toutes les valeurs temporaires

Depuis la version 2.8 je crois, WordPress utilise un mécanisme de cache, se basant sur la table wp-options. Cette méthode est assez pratique, mais elle a un inconvénient principal: la table des options se charge d’une multitude de ligne transient, qui pour certaines ne disparaissent jamais.

La requête suivante fait le ménage, et permet de repartir d’une situation propre:

DELETE FROM wp_options WHERE option_name LIKE '%transient%'

Inutile d’exécuter cette requête tous les jours. Utilisez-là lors de vos sessions d’optimisation.

Supprimer les versions des articles

Le système de gestion des versions est assez pratique. D’une manière générale, nous n’éditons que très rarement des articles déjà publiés. Malgré tout, toutes les versions restent dans la base de données. Pour effacer toutes les versions de la base, il suffit d’appliquer la requête suivante:

DELETE FROM wp_posts WHERE post_type = "revision"

De la même façon, vous pouvez effacer les sauvegardes effectuées automatiquement par WordPress, pendant l’édition des articles:

DELETE FROM wp_posts WHERE post_status = "auto-draft"

Après les effacements …

Si vous effectuez des suppressions massives dans les tables de votre base, il est intéressant d’effectuer après, une « optimisation » de ces tables.
La commande est simple:

OPTIMIZE TABLE nom_de_la_table

Cette commande défragmente la table, et effectue quelques opérations complémentaires, sur les index, notamment.

Utiliser un plugin

Si vous ne souhaitez pas intervenir directement dans la base de données, vous pouvez utiliser le plugin WP-Optimize, qui réalise pour vous, la plupart de ces opérations (mais cela fait un plugin de plus).

2 thoughts on “WordPress: Quelques opérations sur la base de données”

  1. Pour la suppression des versions d’articles, j’utilise cette requête :
    DELETE a,b,c
    FROM wp_posts a
    LEFT JOIN wp_term_relationships b ON (a.ID = b.object_id)
    LEFT JOIN wp_postmeta c ON (a.ID = c.post_id)
    WHERE a.post_type = ‘revision’;

    Ayant remarqué que l’extension Akismet remplit vite la table wp_commentmeta (un commentaire posté entraîne trois enregistrements dans wp_commentmeta dont un assez lourd), je lance régulièrement cette requête :
    DELETE FROM `wp_commentmeta`
    WHERE `meta_key` LIKE ‘Akismet%’

    Je découvre ici l’effacement des valeurs temporaires dans wp_options, je m’en vais tester ça… Merci !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *