WordPressin suorituskyky riippuu erittäin paljon tietokannan toiminnasta. Pienillä sivustoilla tämä ei yleensä näy, mutta suuremmissa ympäristöissä – kuten WooCommerce-kaupoissa, jäsenalueissa tai paljon metadataa käyttävissä sivustoissa – huonosti indeksoitu tietokanta muuttuu nopeasti pullonkaulaksi.
Tietokantaindeksit ovat yksi tehokkaimmista tavoista nopeuttaa WordPressiä ilman frontend-muutoksia. Oikein toteutettu indeksointi voi vähentää query-aikoja sekunneista millisekunteihin.
Mitä tietokantaindeksit ovat
Indeksi toimii samalla tavalla kuin kirjan hakemisto. Sen avulla tietokanta löytää halutun datan ilman että koko taulu täytyy käydä läpi rivi riviltä.
Ilman indeksiä:
- full table scan
- korkea CPU-kuorma
- hitaat queryt
- kasvava latency
Indeksin avulla MySQL tai MariaDB löytää datan huomattavasti tehokkaammin.
WordPressin yleisimmät pullonkaulat
WordPress käyttää paljon metadataa ja dynaamisia kyselyitä.
Yleisimmät ongelmataulut:
- wp_postmeta
- wp_options
- wp_usermeta
- wp_term_relationships
- WooCommerce order tables
- Action Scheduler -taulut
Erityisesti wp_postmeta kasvaa nopeasti valtavaksi.
Miksi wp_postmeta hidastuu
WordPress tallentaa suuren osan lisädatasta wp_postmeta-tauluun.
Esimerkiksi:
- WooCommerce tuotteet
- ACF-kentät
- SEO-data
- custom fields
- variaatiot
Ongelma syntyy siitä, että metadataa haetaan usein meta_key + meta_value -yhdistelmillä.
Esimerkkikysely:
SELECT *
FROM wp_postmeta
WHERE meta_key = '_price'Suurissa tauluissa tästä tulee nopeasti raskasta ilman oikeaa indeksiä.
Indeksin lisääminen käytännössä
Yleinen optimointi:
ALTER TABLE wp_postmeta
ADD INDEX meta_key_index(meta_key(191));Tämä nopeuttaa merkittävästi metadatahakuja.
Composite index käytännössä
Pelkkä yksittäinen indeksi ei aina riitä.
Parempi ratkaisu WooCommerce-ympäristöissä:
ALTER TABLE wp_postmeta
ADD INDEX meta_key_value(meta_key(191), meta_value(50));Tai:
ALTER TABLE wp_postmeta
ADD INDEX postid_metakey(post_id, meta_key(191));Composite index toimii erityisen hyvin silloin, kun query käyttää useita ehtoja.
wp_options-taulun optimointi
wp_options on yksi WordPressin kriittisimmistä tauluista.
Yleisiä ongelmia:
- autoload-data paisuu
- transientit jäävät siivoamatta
- pluginit tallentavat liikaa dataa
Tarkista isot autoloadit:
SELECT option_name, LENGTH(option_value)
FROM wp_options
WHERE autoload = 'yes'
ORDER BY LENGTH(option_value) DESC;Autoload-optimointi
Kaikki data ei tarvitse autoloadia.
Huono:
autoload = 'yes'Parempi isoille datoille:
autoload = 'no'Tämä vähentää jokaisen sivulatauksen muistikuormaa.
Queryjen analysointi EXPLAIN-komennolla
EXPLAIN näyttää miten MySQL suorittaa queryn.
Esimerkki:
EXPLAIN
SELECT *
FROM wp_postmeta
WHERE meta_key = '_sku';Tärkeä kohta:
type = ALLTämä tarkoittaa full table scania ja yleensä huonoa suorituskykyä.
Hyvä tilanne:
type = refTai:
type = indexWooCommerce ja indeksointi
WooCommerce hyötyy indekseistä erittäin paljon.
Tyypillisiä raskaita queryjä:
- tuotehaut
- variaatiot
- hinnat
- SKU-haku
- tilaushistoria
Hyödyllisiä indeksejä:
ALTER TABLE wp_postmeta
ADD INDEX sku_index(meta_key(191), meta_value(100));Action Scheduler -taulut
WooCommerce käyttää Action Scheduleria taustatehtäviin.
Taulut kasvavat nopeasti:
- actionscheduler_actions
- actionscheduler_logs
Indeksit auttavat erityisesti status-hauissa.
Fulltext-indeksit
WordPressin oletushaku on heikko suurissa tietomassoissa.
Fulltext-index:
ALTER TABLE wp_posts
ADD FULLTEXT(post_title, post_content);Tämä nopeuttaa hakua huomattavasti.
MariaDB vs MySQL
MariaDB ja MySQL käyttäytyvät hieman eri tavalla indeksoinnissa.
Modernit versiot:
- MariaDB 10.5+
- MySQL 8+
tarjoavat huomattavasti parempia query optimizereita.
Redis ja tietokantaindeksit
Redis ei korvaa indeksejä.
Redis auttaa:
- object cache
- transientit
- query caching
Mutta hitaat SQL-queryt pitää silti optimoida oikein.
Milloin indeksejä ei kannata lisätä
Liiallinen indeksointi voi myös hidastaa.
Haitat:
- hitaammat INSERT-operaatiot
- suurempi levytila
- enemmän RAM-käyttöä
Indeksoi vain queryt joita käytetään oikeasti.
Query Monitor ja slow query log
Analysoi aina ennen optimointia.
Hyviä työkaluja:
- Query Monitor
- New Relic
- MySQL slow query log
- EXPLAIN
- phpMyAdmin profiler
Älä lisää indeksejä sokkona.
Käytännön workflow
Hyvä optimointiprosessi:
- tunnista hitaat queryt
- analysoi EXPLAINilla
- lisää oikea indeksi
- testaa suorituskyky
- monitoroi vaikutus
Yleisimmät virheet
Tyypillisiä ongelmia:
- indeksit lisätään väärään sarakkeeseen
- liian monta indeksiä
- meta_value indeksoidaan liian laajasti
- queryjä ei analysoida ennen optimointia
- autoload-data jätetään hallitsematta
Yhteenveto
WordPressin tietokantataulujen indeksointi on yksi tehokkaimmista tavoista parantaa suorituskykyä erityisesti suurissa sivustoissa ja WooCommerce-kaupoissa. Oikein suunnitellut indeksit vähentävät tietokantakuormaa, nopeuttavat queryjä ja parantavat koko sivuston vasteaikaa.
Tärkeintä on analysoida todelliset pullonkaulat ennen optimointia. Hyvä indeksointi perustuu oikeisiin queryihin, ei satunnaiseen indeksien lisäämiseen.