I've been reading about how inefficient is wordpress with postmeta. That's why I created the query manually. This is the query:
SELECT p.*,
GROUP_CONCAT(pm1.meta_key ORDER BY pm1.meta_key DESC SEPARATOR '||') as meta_keys,
GROUP_CONCAT(pm1.meta_value ORDER BY pm1.meta_key DESC SEPARATOR '||') as
FROM w47fa_posts p
LEFT JOIN w47fa_postmeta pm1 on pm1.post_id = p.ID
LEFT JOIN w47fa_postmeta pm2 on pm2.post_id = p.ID
LEFT JOIN w47fa_postmeta pm3 on pm3.post_id = p.ID
LEFT JOIN w47fa_postmeta pm4 on pm4.post_id = p.ID
LEFT JOIN w47fa_postmeta pm5 on pm5.post_id = p.ID
LEFT JOIN w47fa_postmeta pm6 on pm6.post_id = p.ID
LEFT JOIN w47fa_postmeta pm7 on pm7.post_id = p.ID
LEFT JOIN w47fa_postmeta pm8 on pm8.post_id = p.ID
LEFT JOIN w47fa_postmeta pm9 on pm9.post_id = p.ID
LEFT JOIN w47fa_postmeta pmA on pmA.post_id = p.ID
LEFT JOIN w47fa_postmeta pmB on pmB.post_id = p.ID
WHERE pm1.meta_key = '_autonomia' AND pm1.meta_value > " . $min_autonomia . "
AND pm2.meta_key = '_potencia' AND pm2.meta_value > " . $min_potencia . "
AND pm3.meta_key = '_velmax' AND pm3.meta_value > " . $min_vel_maxima . "
AND pm4.meta_key = '_pesosop' AND pm4.meta_value > " . $min_peso_max . "
AND pm5.meta_key = '_peso' AND pm5.meta_value < " . $max_peso . "
AND pm6.meta_key = '_sillin' AND pm6.meta_value >= " . $sillin . "
AND pm7.meta_key = '_plegable' AND pm7.meta_value >= " . $plegable . "
AND pm8.meta_key = '_todoterreno' AND pm8.meta_value >= " . $terrenos . "
AND pm9.meta_key = '_doblemotor' AND pm9.meta_value >= " . $doblemotor . "
AND pmA.meta_key = '_biplaza' AND pmA.meta_value >= " . $biplaza . "
AND pmB.meta_key = '_price' AND pmB.meta_value >= " . $min_price . "
AND p.post_type = 'product' AND p.post_status = 'publish'
ORDER BY p.ID
The weird thing is that there are two postmeta that are very slow: _biplaza and _price.
It has no sense but this are the media times:
Query without _price and without _biplaza: 0.8s
Query without _price and with _biplaza: 6.3s
Query with _price and without _biplaza: 9.6s
The rest of the postmeta are relatively efficient.
What am I doing wrong?