/ / Ulepszanie instrukcji MySQL Select w temacie WordPress - mysql, sql, wordpress, tuning zapytań

Poprawianie instrukcji MySQL Select w WordPress - mysql, sql, wordpress, tuning zapytań

Korzystam z silnika motywu WordPress z Industrialthemes i widzę, że renderowanie strony głównej wykorzystuje wiele zapytań, których użycie w mojej bazie danych MySQL trwa około 0,4 sekundy.

SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1 =1
AND (wp_term_relationships.term_taxonomy_id IN (1))
AND wp_posts.post_type = "post"
AND (wp_posts.post_status = "publish"
OR wp_posts.post_status = "closed")
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0,  5;

Czy istnieje sposób na poprawę tego zapytania? O ile widzę, instalacja WordPressa ma domyślne indeksy dla wszystkich zaangażowanych pól. Moja wiedza na temat dostrajania instrukcji SQL Select nie jest dobra, więc mam nadzieję, że niektórzy eksperci pomogą mi w tym.

Odpowiedzi:

0 dla odpowiedzi № 1
wp_term_relationships needs INDEX(term_taxonomy_id, object_id) -- in this order
wp_posts might benefit from INDEX(post_type, ID, post_status, post_date) -- in this order

Oba są wskaźnikami "obejmującymi".
Ten pierwszy pozwala JOIN wydajnie pracować i daje optymalizatorowi opcję rozpoczęcia wp_term_relationships.
Te ostatnie powinny działać dobrze niezależnie od tego, która tabela zostanie wybrana jako pierwsza.