Pozor! Jakýkoliv neodborný zásah do databáze může mít fatální následky. Bez aktuální zálohy neprovádějte žádné úpravy!
Vystavujete se riziku, že poslední dostupná záloha na hostingu, která je obvykle vytvářena o půlnoci, nemusí obsahovat nejnovější obsah, objednávky ani jiná důležitá data. Mohli byste tak přijít o vše, co bylo změněno po poslední záloze!
WooCommerce využívá databázi WordPressu, přičemž všechny tabulky mají předponu (standardně „wp_“, lze však změnit). Databázová struktura zahrnuje jak standardní tabulky WordPressu (například posts, postmeta či comments), tak vlastní tabulky vytvořené pro potřeby e-shopu (např. pro správu objednávek, produktů, nastavení daní a dopravy). Tento článek poskytuje detailní přehled struktury, praktické příklady a doporučení, jak správně optimalizovat a udržovat databázi.
Všechny názvy databázových tabulek jsou uvedeny bez prefixu, standardně je to prefix wp_, to znamená, že tabulka se například nebude nazývat actionscheduler_actions, ale wp_actionscheduler_actions.
Hlavní tabulky a jejich popis
Níže uvedená tabulka shrnuje nejdůležitější tabulky použití WooCommerce:
actionscheduler_actions: Plánované úlohy, které se vykonávají pomocí Action Scheduler, obdobně jako WP_Cron.
actionscheduler_claims: Obsahuje informace o dávkách akcí, které čekají na zpracování.
actionscheduler_groups: Skupiny plánovaných úloh.
actionscheduler_logs: Logy a protokoly událostí z Action Scheduleru.
woocommerce_sessions: Ukládá data uživatelských relací – obsah nákupního košíku, dočasné informace o uživatelích.
woocommerce_api_keys: Klíče pro REST API komunikaci s WooCommerce.
woocommerce_attribute_taxonomies: Definuje vlastnosti (atributy) produktů.
woocommerce_downloadable_product_permissions: Přístupová práva ke stažitelným produktům.
woocommerce_order_items: Jednotlivé položky objednávek (produkty, poplatky, doprava).
woocommerce_order_itemmeta: Metadata položek objednávek, např. množství, cena nebo unikátní klíče.
woocommerce_tax_rates: Daňové sazby nastavené v administraci.
woocommerce_tax_rate_locations: Lokace – PSČ, města spojené s danými sazbami.
woocommerce_shipping_zones: Doručovací zóny definované v administraci WooCommerce.
woocommerce_shipping_zone_locations: Lokace přiřazené jednotlivým doručovacím zónám.
woocommerce_shipping_zone_methods: Metody doručení navázané na jednotlivé zóny.
woocommerce_payment_tokens: Ukládá platební tokeny, např. pro uložení informací o platebních kartách.
woocommerce_payment_tokenmeta: Metadata příslušná k platebním tokenům.
woocommerce_log: Interní logy a sledování událostí v WooCommerce.
wc_webhooks: Webhooky registrované v nastavení WooCommerce (např. pro upozornění externích aplikací).
wc_download_log: Protokol stažení ke stažitelným produktům.
wc_product_meta_lookup: Indexuje vlastnosti produktů pro rychlejší vyhledávání (filtrace, řazení podle ceny, dostupnosti apod.).
wc_tax_rate_classes: Definice daňových tříd, které mohou ovlivňovat výpočet daní.
wc_reserved_stock: Rezervace položek na skladě, aby se předešlo konfliktům při paralelních objednávkách.
Ukládání objednávek a produktů
Objednávky
Objednávky jsou uloženy jako vlastní typ příspěvku (shop_order) a rozděleny mezi několik tabulek:
posts: Základní informace o objednávce (ID, datum, stav).
postmeta: Detailní metadata, například celková cena, adresa zákazníka nebo uživatelské informace.
woocommerce_order_items & woocommerce_order_itemmeta: Položky objednávky a jejich doplňková metadata (informace o jednotlivých produktech, množství, cenu za jednotku apod.).
comments: Ukládají se poznámky nebo interní komentáře ke konkrétní objednávce.
Produkty
Produkty jsou rovněž typem příspěvku a jejich data jsou rozdělena následovně:
posts: Základní informace – název, popis, stav publikace.
postmeta: Detailní nastavení produktu, jako cena, skladová dostupnost či vlastní atributy.
wc_product_meta_lookup: Optimalizovaný index pro rychlé vyhledávání a filtrování produktů dle jejich vlastností.
comments: Zde se ukládají recenze a hodnocení od zákazníků.
Entity Relationship Diagram (ERD)
Pro lepší pochopení vztahů mezi tabulkami je doporučeno vytvářet ER diagram. Například diagram znázorni, jak je tabulka posts propojená s postmeta, woocommerce_order_items a následně s woocommerce_order_itemmeta. Pro jeho vytvoření lze použít nástroje jako MySQL Workbench nebo online služby. Diagram pomůže:
- Vizualizovat vztahy mezi objednávkami, produkty a uživateli.
- Identifikovat klíčová propojení pro optimalizaci dotazů.
- Snadněji diagnostikovat případné nesrovnalosti v datech.
Optimalizace databáze WooCommerce
Optimalizace databáze je zásadní pro udržení vysokého výkonu vašeho e-shopu. WooCommerce spolu s WordPressem ukládá řadu nadbytečných dat – od revizí, přes transients, až po systémové logy a staré relace. Pro jejich odstranění doporučuji pravidelnou údržbu, kterou můžete provádět buď automaticky pomocí pluginů, nebo manuálně.
Doporučené pluginy a nástroje
- WP-Optimize
Tento bezplatný plugin odstraní nepotřebná data, revize a spamové komentáře. Umožňuje také manuální čištění a automatickou optimalizaci tabulek, což výrazně zrychlí databázi. - WP-Sweep
Používá vestavěné WordPress funkce ke smazání nadbytečných revizí, metadat a dalších nepotřebných záznamů. Jeho výhodou je přehledný statistický výpis – snadno zjistíte, kolik dat bylo odstraněno. - Advanced Database Cleaner
Plugin nabízí čištění databáze (odstranění revizí, konceptů, odpadních komentářů) i možnost naplánovat automatickou údržbu. Před použitím doporučuji vždy provést kompletní zálohu databáze. - Manuální optimalizace prostřednictvím phpMyAdmin
- actionscheduler _actions a _logs Nezapomeňe, že na webu mam snippet, diky němuž mužete automatický čistit nepotřebné záznamy v actionscheduler _actions a _logs. Článek zde s návodem.
High-Performance Order Storage (HPOS)
S nedávnými verzemi WooCommerce byl zaveden koncept High-Performance Order Storage (HPOS). HPOS přesouvá některá data objednávek do vlastních tabulek, čímž se odlehčuje tradiční struktura postů a postmeta. Výhody HPOS:
- Zvýšení rychlosti při načítání objednávek.
- Lepší škálovatelnost při velkém objemu dat.
- Zjednodušená diagnostika a optimalizace databáze.
Doporučuji sledovat oficiální dokumentaci WooCommerce, neboť HPOS přináší změny, které mohou vyžadovat úpravy v custom řešeních.
Nejlepší postupy pro správu dat
Správná správa dat se nejen pozitivně odrazí na výkonnosti e-shopu, ale také výrazně usnadní diagnostiku a další rozvoj. Níže uvádím několik osvědčených přístupů spolu s doporučenými nástroji, které jsou zdarma dostupné:
Údržba a čištění:
Naplánujte si pravidelnou údržbu – například každých pár měsíců zkontrolujte stav a velikost tabulek, případně odstraňte staré a nepotřebné položky. Kombinace výše uvedených pluginů v režimu automatického čištění vám pomůže udržet databázi v optimálním stavu.
Pravidelné zálohování databáze:
Používejte plugin třeba UpdraftPlus k vytvoření pravidelných záloh. Automatizované zálohování zajistí, že v případě nepředvídané události můžete rychle obnovit původní stav. Pozor na kompletní zálohy webu včetně databáze. Většina hostingů zakazuje automatizované vlastní zálohování v rámci webového účtu. Zálohy proto provádějte na vzdálené úložiště, například Google Drive nebo OneDrive.
Zálohujte s rozvahou a ideálně vždy před aktualizací nebo zásadní změnou webu, abyste měli k dispozici poslední funkční zálohu. Tyto zálohy můžete dočasně uložit lokálně na hostingu nebo rovnou na vzdálené úložiště. Pokud je vše v pořádku, zálohu z hostingu smažte a deaktivujte zálohovací plugin.
Monitoring výkonu:
Plugin Query Monitor sleduje pomalé SQL dotazy, chybné volání a další problémové kousky kódu. Tento nástroj vám pomůže rychle odhalit úzká místa a optimalizovat konkrétní dotazy.
Bezpečnostní opatření:
Při přímé manipulaci s databází vždy používejte funkci $wpdb->prepare()
ke správnému ošetření vstupních dat. Dále doporučuji pravidelně kontrolovat oprávnění databázových uživatelů a omezit přístup pouze na autorizované IP adresy.
Příklady užitečných SQL dotazů
1. Výpis objednávek za poslední měsíc:
Dotaz spojuje tabulky wp_posts
(kde jsou uloženy objednávky jako typ příspěvku shop_order
) a wp_postmeta
(kde jsou uloženy doplňující data, jako celková cena objednávky). Důraz je kladen na práci s indexovanými sloupci (např. post_date
a meta_key
):
SELECT p.ID, p.post_date, pm.meta_value AS total
FROM wp_posts AS p
JOIN wp_postmeta AS pm ON p.ID = pm.post_id
WHERE p.post_type = 'shop_order'
AND p.post_date >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
AND pm.meta_key = '_order_total';
SQL2. Rychlé vyhledání produktů podle ceny:
Tento dotaz vyhledává produkty v určité cenové relaci, kde se cena ukládá v wp_postmeta
. Použití funkce CAST()
zajistí správné porovnání číselné hodnoty:
SELECT p.ID, p.post_title, meta.meta_value AS price
FROM wp_posts AS p
JOIN wp_postmeta AS meta ON p.ID = meta.post_id
WHERE p.post_type = 'product'
AND meta.meta_key = '_price'
AND CAST(meta.meta_value AS DECIMAL(10,2)) BETWEEN 100 AND 500;
SQL3. Seznam položek objednávky se získáním detailů:
Pro získání komplexního přehledu o položkách objednávky je třeba spojit tabulky woocommerce_order_items
a woocommerce_order_itemmeta
:
SELECT oi.order_item_id, oi.order_item_name, oim.meta_key, oim.meta_value
FROM wp_woocommerce_order_items AS oi
JOIN wp_woocommerce_order_itemmeta AS oim ON oi.order_item_id = oim.order_item_id
WHERE oi.order_id = 1234;
SQLTyto dotazy lze dále optimalizovat pomocí příslušných indexů a přizpůsobit konkrétním potřebám.
Diagnostika a řešení problémů s databází
Při správě WooCommerce databáze se můžete setkat s následujícími problémy:
- Pomalé načítání: Zkontrolujte indexy, optimalizujte dotazy a odstraňte nepotřebná data. Nástroje jako Query Monitor vám pomohou identifikovat úzká místa.
- Chybějící data: Například nesprávně propojené záznamy mezi posts a postmeta mohou způsobit chyby při načítání objednávek či produktů. Proveďte validaci integrity dat.
- Přetížení databáze: Při masivních objemech dat zvažte rozdělení databáze, použití HPOS a pravidelné archivování starých dat.
Doporučení pro psaní SQL dotazů
- Specifikujte pouze potřebné sloupce:
Vyhýbejte se využíváníSELECT *
– vždy uveďte jen ty sloupce, které skutečně potřebujete, což významně snižuje zátěž serveru. - Používejte připravené dotazy:
Při vyvolávání SQL dotazů z PHP využijte$wpdb->prepare()
, abyste ochránili aplikaci před SQL injection útoky. - Optimalizujte dotazy indexováním:
Ujistěte se, že sloupce používané ve WHERE klauzulích mají odpovídající indexy. Například u filtrů dle data či jiné často dotazované sloupce, jako jepost_date
nebometa_key
. - Testujte a monitorujte výkon:
Nástroj Query Monitor vám pomuže zjistit, které dotazy jsou příliš pomalé a díky této informaci máte skvělý základ pro optimalizaci.
Bezpečnostní doporučení
Bezpečnost databáze by měla být vždy prioritou:
- Pravidelné zálohování: Před jakýmikoli zásahy nebo optimalizacemi vždy proveďte zálohu celé databáze.
- Bezpečný přístup: Ujistěte se, že přístup k databázi je omezen pouze na autorizované uživatele a používejte silná hesla.
- Ochrana proti SQL injection: Při psaní vlastních dotazů používejte připravené dotazy a sanitizaci vstupů.
- Aktualizace a monitoring: Sledujte bezpečnostní aktualizace WordPressu a WooCommerce a pravidelně monitorujte přístupové logy.