Nowy Dla użytkownika, PrestaShop

Czyszczenie bazy danych PrestaShop

Baza danych PrestaShop z czasem może urosnąć do pokaźnych rozmiarów, nie wszystkie dane, które tam zbieramy są nam potrzebne przez cały czas działania sklepu. W tym artykule dziele się z Wami kilkoma zapytaniami SQL, które pozwolą odchudzić bazę danych.

Prefix bazy danych

W artykule w nazwach tabel specjalnie używamy PREFIX_nazwa_tabeli ponieważ prefix to coś co powinniście dostosować do Waszej sytuacji jako, że wierzę, że nie używacie standardowego ps_, a jeżeli tak to sugeruję by to zmienić. Po skopiowaniu zapytania SQL pamiętajcie by zmienić wszystkie wystąpienia PREFIX. Rekomenduje również wykonanie kopii zapasowych przed wykonaniem poniższych zapytań.

Czyszczenie tabeli PREFIX_guest i PREFIX_cart

W tabeli PREFIX_guest zbierają się dane na temat odwiedzających, są tam również rekordy, które z biegiem czasu nie są nam do niczego potrzebne. Jednym ze sposobów na wyczyszczenie tej tabeli jest usunięcie z niej wszystkich rekordów, które nie zakończyły się zakupam, rejestracją klienta, stworzeniem koszyka. Poniższe zapytanie usunie niezrealizowane koszyki starsze niż jeden miesiąc.

DELETE FROM PREFIX_cart
WHERE id_cart NOT IN (SELECT id_cart FROM PREFIX_orders)
AND date_add < NOW() - INTERVAL 1 MONTH;

Po wyczyszczeniu tabeli koszyków, warto rozważyć wyczyszczenie tabeli gości, które mogą zawierać rekordy widmo po wykonaniu poprzedniego zapytania.

DELETE guest FROM PREFIX_guest as guest
LEFT JOIN PREFIX_cart as cart ON guest.id_guest = cart.id_guest
WHERE id_cart IS NULL

Tabele PREFIX_connections i PREFIX_connections_source

Tabele te przechowują informacje o odwiedzinach klientów o ile używacie modułu statsdata i macie włączone zbieranie tych informacji. Jeżeli używacie w swoim sklepie Google Analytics, Matomo czy innego rozwiązania do analityki to prawdopodobnie nie potrzebujecie danych z tych tabel. Chciałbym tutaj jednak dodać, że czasami tych danych używają moduły firm trzecich, np. niektóre moduły integrujące Google Tag Manager używają danych z tych tabel do określenia źródła ruchu dla konwersji. Przed zmianą konfiguracji modułu statsdata lub czyszczeniem tych tabel warto skonsultować ze specjalistom czy te dane nie są Wam potrzebne.

Jeżeli korzystacie z modułów do Google Tag Manager, które mogą wykorzystywać te dane, warto by usunąć tylko rekordy starsze niż np. 6 msc. Na dole dwa zapytania, które usuną rekordy starsze niż 3 miesiące.

DELETE FROM PREFIX_connections
WHERE date_add < NOW() - INTERVAL 3 MONTH;
DELETE FROM PREFIX_connections_source
WHERE date_add < NOW() - INTERVAL 3 MONTH;

Tabele PREFIX_log, PREFIX_mail

Te tabele przechowują dane, które mogą okazać się ważne, ale na pewno nie potrzebujecie ich całej historii. Preferuje by je archiwizować od czasu do czasu i mamy tutaj dwie opcje, możemy je czyścić z danych starszych niż kilka miesięcy lub całkowicie po ich archiwizacji co jakiś czas.

DELETE FROM PREFIX_log
WHERE date_add < NOW() - INTERVAL 3 MONTH;
DELETE FROM PREFIX_mail
WHERE date_add < NOW() - INTERVAL 3 MONTH;

Optymalizacja tabel po czyszczeniu

Po wykonaniu czyszczenia na poszczególnych tabelach warto uruchomić polecenie, które je zoptymalizuje, np.:

OPTIMIZE TABLE PREFIX_connections, PREFIX_connections_source;

Co dalej?

Na rynku istnieje wiele modułów, które pozwalają wykonać takie czyszczenie w prostszy sposób. Pamiętajcie również by uruchamiać takie moduły w pierwszej kolejności na kopii sklepu. Mogą one powodować problemy z integralnością danych.

Jednym z darmowych modułów, które mogą przydać się przy czyszczeniu bazy danych PrestaShop jest moduł PrestaClean, dostępny na GitHub.

Wspomniane w artykule zapytania warto wykonywać regularnie, być może nawet stworzyć plik, który będzie wykonywał się za pomocą zadania cyklicznego na serwerze. Oczywiście to tylko kilka przykładów tabel, które można bezpiecznie wyczyścić, nie porusza on naprawiania integralności danych i usuwania rekordów widmo w niektórych miejscach, usuwania przestarzałych rabatów, itd., być może kiedyś będzie okazja o tym napisać.

Udostępnij

Zobacz inne