web-dev-qa-db-fra.com

30 messages/s sont-ils considérés comme lents pour wp_delete_post?

J'ai environ 90 000 publications dans WordPress et je souhaite supprimer la plupart d'entre elles à l'aide d'un plugin. Je récupère tous les identifiants des articles qui doivent être supprimés, puis procède comme suit:

// $delete_posts contains all IDs
foreach ($delete_posts as $dp) {
    wp_delete_post($dp, true);
}

Je suis assis ici à me demander pourquoi mon plugin ne fonctionne pas comme prévu - j'ai vérifié ma base de données avec PhpMyAdmin et me suis rendu compte que les posts sont supprimés très très lentement. Peut-être 30 publications par seconde? C'est vraiment trop lent. Ou est-ce que j'utilise mal cette fonction pour supprimer des messages?

1
beeef

Le facteur de vitesse de toute fonction traitant du contenu tel que wp_insert_post() ou wp_delete_post() dépend fortement de la situation et du contenu traité.

Faisons un exemple simple. Vous avez un article contenant une image sélectionnée, une douzaine de balises, des catégories, un millier de champs personnalisés, des taxonomies attribuées et cent autres. Lorsque vous exécutez une commande pour supprimer ce message, vous n'essayez pas seulement de supprimer un lien permanent de la base de données, vous essayez également les éléments suivants:

  • Détachez la vignette du message
  • Supprimer une douzaine de relations à terme
  • Exécuter une boucle et traiter un million de métadonnées
  • Et peut-être plus.

Si vous exécutez une commande SQL et supprimez simplement les données de la publication de la base de données (non recommandé), la vitesse peut atteindre plusieurs milliers de publications par seconde. Mais, supprimer complètement le contenu et dissocier les relations est lourd.

3
Jack Johansson

Oui, définitivement 30 secondes, c'est trop pour supprimer le post. Mais semble-t-il, le problème n'est-il pas wordpress - il pourrait même s'agir d'un autre framework ou d'un noyau PHP. À mon avis, le problème avec la base de données mysql et son optimisation. Vérifiez simplement combien d'enregistrements avez-vous, comment est une clé primaire (supprimez-vous par ID ou nom de poste?), Combien de colonnes, etc. L'important est de savoir que cette table s'ouvre rapidement. Par exemple, dans notre plus grand projet avec des enregistrements 3M, ils ont supprimé assez rapidement - http://merehead.com/projects/frevend/

0
Joe_19