¿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
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.
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
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;
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.
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.
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.
0 Commentaires