coffee writing computer blogging

WordPress Meta Query slow / many inner joins

Bei der Entwicklung eines WordPress Plugins mit vielem Post Meta Daten, ist mir das relativ bekannte Problem der langsamen Meta Queries und deren inner Joins je Meta Key auf die Füße gefallen. Hierbei kamen bis zu 10 inner Joins zusammen, was dazu führte, dass der MySQL Server selbst bei Anbietern wie bei 1&1 und Strato abrauchte. Meine erste Idee war es, mit einem passenden Hook die Meta Query selbst zu manipulieren und die inner Joins zu reduzieren. Da dies aber wenig von Erfolg gekrönt war, stolperte ich über die Idee der Indexes. Da es sich bei der Tabelle post_meta im Grunde um einen Key / Value Storage handelt, fügte ich also den Index hinzu:

CREATE INDEX wpm_ix ON wp_postmeta (post_id, meta_key);

Das Ergebnis war mehr als zufrieden stellend. Die Abfragen enthielten dennoch die vielen inner Joins, jedoch war es dank dem Index jetzt schneller und der MySQL Server hat sich auch nicht verabschiedet. Wer bei dem oben genannten SQL Command auf Fehlermeldungen wie Specified key was too long; max key length is xyz bytes stößt, kann dies beheben indem er die Länge des post_meta.meta_key reduziert. Die Query hierfür wäre eine normale alter Table angabe:

ALTER TABLE wp_postmeta MODIFY meta_key VARCHAR(191);

Mehr zu diesem Thema findet man natürlich auf StackOverflow auf diesem Thread: Improving a query using a lot of inner joins to wp_postmeta, a key/value table

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert