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ć.