Ticker

6/recent/ticker-posts

Ad Code

Responsive Advertisement

Optimizar la tabla wp_postmeta en WordPress

¿Has revisado alguna vez los datos de la tabla wp_postmeta?, en algunas ocasiones esta tabla suele llenarse de registros que deberíamos depurar, en este artículo veremos como realizar esto con consultas SQL.

 

Generalidades

Este artículo esta basado en un caso real de un sitio web WordPress, en el cual note que la tabla wp_postmeta había crecido demasiado, llegando a los 4GB aproximadamente.

 

Revisión de Registros

Lo primero es analizar los meta_keys que tienen más registros, esto lo podemos hacer con consultas SQL.

Contar meta_keys

Puedes usar la siguiente consulta SQL para contar la cantidad de registros por cada meta_key

SELECT COUNT(meta_key) contar, meta_key
FROM wp_postmeta
GROUP BY meta_key ORDER BY contar DESC;

 
Si notamos que hay una gran cantidad del meta_key llamado: _wp_old_date

meta_key en tabla wp_postmeta

 
El meta_key _wp_old_date define la fecha de cambio del objeto y se vuelve a crear de ser necesario. Por lo tanto podemos eliminar los registros con este meta_key.

Puedes ver una referencia a este meta_key en la función wp_check_for_changed_dates() de WordPress

 

Contar registros repetidos post_id, meta_key, meta_value

A veces algunos plugins, por error, o por un bug, puede insertar registros repetidos, para el mismo post_id, con meta_key y meta_value iguales.

Para detectarlos podemos usar la siguientes consultas SQL

SELECT COUNT(*) FROM wp_postmeta;
SELECT COUNT(DISTINCT post_id, meta_key, meta_value) FROM wp_postmeta;

 
Si notamos alguna diferencia importante en la cantidad de registros, tal como se muestra en la imagen, entonces será necesario eliminar los registros repetidos

Comparación registros repetidos

 
En la siguiente imagen se muestra un ejemplo de registros repetidos para el post_id = 16, usando la siguiente consulta:

SELECT * FROM wp_postmeta WHERE post_id = 16 ORDER BY meta_key;
Revisión registros con el mismo valor

 

Eliminación de registros de la tabla wp_postmeta

Una vez que hemos identificado los registros que queremos eliminar, podemos hacer consultas SQL para borrarlos.

Realiza una copia de seguridad de tu Base de Datos antes de realizar estos cambios.

 

Eliminación de meta_key _wp_old_date

Puedes eliminar los meta_key _wp_old_date de toda la tabla con la siguiente consulta:

DELETE FROM wp_postmeta WHERE meta_key = '_wp_old_date';

 

Eliminación de registros repetidos

Para eliminar registros repetidos crearemos una tabla temporal en donde guardaremos los datos sin repeticiones, luego truncaremos la tabla wp_postmeta y finalmente volcaremos los datos a la tabla vacía.

Todas estas consultas deben ejecutarse en una misma sesión, de otro modo la tabla temporal se perderá y también los datos.
CREATE TEMPORARY TABLE tmp_postmeta SELECT DISTINCT post_id, meta_key, meta_value FROM wp_postmeta;
TRUNCATE TABLE wp_postmeta;
INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT post_id, meta_key, meta_value FROM tmp_postmeta;

 

Conclusión

Como has podido comprobar, en algunos casos tenemos que la tabla wp_postmeta puede crecer mucho y es necesario inspeccionarla para ver si tiene registros repetidos o algún meta_key que podamos eliminar.

 

La entrada Optimizar la tabla wp_postmeta en WordPress es un artículo reciente del sitio DecodeCMS.

Enregistrer un commentaire

0 Commentaires