Następujące zapytanie powraca jako wolne zapytanie w monitorze zapytań. Zajmuje to około 0,4 sekundy. Czy istnieje sposób na zwiększenie szybkości zapytań?

Zapytanie pod tą samą tabelą (wp_postmeta), pobieranie 2 zestawów meta_key i meta_value dla jego stanu

SELECT p.post_id as id
FROM `wp_postmeta`as p, `wp_postmeta`as b
WHERE p.post_id = b.post_id
AND (b.meta_key = 'gift_price' and b.meta_value != '')
AND (p.meta_key = '_stock_status' and p.meta_value = 'instock') 

Próbowałem bawić się wartością meta_value> 1 dla gift_price i to jeszcze bardziej ją spowalnia.

0
WkL 9 marzec 2020, 22:02

2 odpowiedzi

Najlepsza odpowiedź

Tabele „meta” w WP mają nieefektywną specyfikację schematu. Rekomendacje: http://mysql.rjweb.org/doc.php/index_cookbook_mysqost_meta / a>

0
Rick James 10 marzec 2020, 00:49

Zindeksuj tabelę wp_postmeta

ALTER TABLE `wp_postmeta` 
   ADD INDEX `IndexName` (`post_id` ASC, `meta_key` ASC, `meta_value` ASC);

Użyj EXPLAIN i sprawdź, czy indeks działa

EXPLAIN SELECT p.post_id as id
FROM `wp_postmeta`as p, `wp_postmeta`as b
WHERE p.post_id = b.post_id
AND (b.meta_key = 'gift_price' and b.meta_value != '')
AND (p.meta_key = '_stock_status' and p.meta_value = 'instock') 
0
gilbertdim 10 marzec 2020, 01:30