Nettoyer sa base de données Prestashop 1.7 et 8

Si l’interface administrateur de Prestashop commence à être longue à charger, c’est peut-être que votre base de données nécessite un petit nettoyage.

Nettoyer la base de données de Prestashop consiste à supprimer toutes les données qui ne sont plus nécessaires, ni à vous, ni aux visiteurs.

Cela permet d’améliorer grandement le temps de chargement de l’interface admin, surtout lorsque vous collectez les statistiques sur les visiteurs.

Pour nettoyer périodiquement votre base de donnée Prestashop, copiez/collez le script ci-dessous dans un fichier PHP, puis, exécutez-le chaque jour grâce à une tâche cron.

Ce script vous permettra de garder les données durant un nombre de jours limité, puis, de les supprimer automatiquement.

Attention, ce script efface également les paniers. Veillez à garder ces derniers au minimum 30 jours pour ne pas dégrader l’expérience des visiteurs.

<?php

$days = 30;// nombre de jours à garder

// CHEMIN À MODIFIER SELON VOTRE CONFIGURATION
$parameters = (include '/dossier/de/la/boutique/prestashop/app/config/parameters.php');
$parameters = $parameters['parameters'];

$mysql = mysqli_connect(
        $parameters['database_host'],
        $parameters['database_user'],
        $parameters['database_password'],
        $parameters['database_name'],
        $parameters['database_port']);

// supprimer les indexes de prix dont le produit n'existe plus
mysqli_query($mysql, 'DELETE FROM `ps_layered_price_index` WHERE id_product NOT IN (SELECT id_product FROM ps_product)');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_layered_price_index`');

// supprimer les paniers abandonnés non liés à un client
mysqli_query($mysql, 'DELETE FROM `ps_cart` WHERE `date_upd` < DATE_ADD(NOW(), INTERVAL -' . $days . ' DAY) AND `id_customer` = 0');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_cart`');
mysqli_query($mysql, 'DELETE FROM `ps_cart_product` WHERE `id_cart` NOT IN (SELECT `id_cart` FROM `ps_cart`)');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_cart_product`');
mysqli_query($mysql, 'DELETE FROM `ps_cart_cart_rule` WHERE `id_cart` NOT IN (SELECT `id_cart` FROM `ps_cart`)');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_cart_cart_rule`');

// supprimer les visiteurs non liés à un client ou à un panier et dont la dernière visite date de plus de 30 jours
mysqli_query($mysql, 'DELETE FROM `ps_guest` WHERE `id_customer` = 0 AND `id_guest` NOT IN (SELECT `id_guest` FROM `ps_cart`) AND `id_guest` NOT IN (SELECT `id_guest` FROM `ps_connection` WHERE `date_add` > DATE_ADD(NOW(), INTERVAL -' . $days . ' DAY))');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_guest`');

// supprimer les visites non liés à un visiteur (client)
mysqli_query($mysql, 'DELETE FROM `ps_connections` WHERE `id_guest` NOT IN (SELECT `id_guest` FROM `ps_guest`)');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_connections`');

// supprimer les pages visitées non liées à une visite
mysqli_query($mysql, 'DELETE FROM `ps_connections_page` WHERE `id_connections` NOT IN (SELECT `id_connections` FROM `ps_connections`)');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_connections_page`');

// supprimer les sources non liées à une visite
mysqli_query($mysql, 'DELETE FROM `ps_connections_source` WHERE `id_connections` NOT IN (SELECT `id_connections` FROM `ps_connections`)');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_connections_source`');

// supprimer les statistiques sur les pages non trouvées
mysqli_query($mysql, 'DELETE FROM `ps_pagenotfound` WHERE `date_add` < DATE_ADD(NOW(), INTERVAL -' . $days . ' DAY)');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_pagenotfound`');

// supprimer les stock des produits n'existant plus
mysqli_query($mysql, 'DELETE FROM `ps_stock_available` WHERE `id_product` NOT IN (SELECT `id_product` FROM `ps_product`)');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_stock_available`');

// supprimer les stock des déclinaisons n'existant plus
mysqli_query($mysql, 'DELETE FROM `ps_stock_available` WHERE `id_product_attribute` NOT IN (SELECT `id_product_attribute` FROM `ps_product_attribute`) AND `id_product_attribute` != 0');
mysqli_query($mysql, 'OPTIMIZE TABLE `ps_stock_available`');

Le script est conçu pour les bases de données MySQL. Il sera nécessaire de l’adapter si vous utilisez un autre type de base de données.

Attention également au préfixe de table. Si vous avez choisi un préfixe différent de «ps_» pour vos tables, vous devrez adapter le script à votre convenance.

Si vous avez d’autres requêtes à proposer pour améliorer ce script, n’hésitez pas à le partager dans les commentaires!


Commentaires

Laisser un commentaire

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