qant
@qant
programer

Как ускорить сложный запрос mysql?

Используется стандартные таблицы где хранятся таксономии и метабоксы
Можно ли как то ускорить или это нормально для мультиязычных сайтов?
Может создать временную таблицу? Удалить или добавить какие то индексы?
Explaine:

4Ak9wlJhoGQ8em.jpg
Запрос Выполняется 4.281 sec.:
SELECT
    p.ID, p.post_title, 
    pm.meta_value as PID, 
    pm2.meta_value as OID, 
    pm1.meta_value as Price, 
    tr.language_code, tr.trid, tm.term_id, 
    tm.name as staus
FROM
	wp_posts AS p
        JOIN
    wp_postmeta AS pm ON (p.ID = pm.post_id)
		JOIN
    wp_postmeta AS pm1 ON (p.ID = pm1.post_id)
        JOIN
	wp_postmeta AS pm2 ON (p.ID = pm2.post_id)
        JOIN
    wp_icl_translations AS tr ON (p.ID = tr.element_id)
		JOIN
    wp_term_relationships AS trm ON (p.ID = trm.object_id)
		JOIN
    wp_term_taxonomy AS ttx ON (trm.term_taxonomy_id = ttx.term_id)
		JOIN
    wp_terms AS tm ON (ttx.term_id = tm.term_id)
WHERE
	p.post_type = 'property'
    AND p.post_status = 'publish'
    AND pm.meta_key = 'fave_property_id'
    AND pm.meta_value in (70441,70451,70481,70482,70483,70501)
    AND pm1.meta_key = 'fave_property_price'
    AND pm2.meta_key = 'owner_property_id'
    AND ttx.taxonomy = 'property_status'
    ;
  • Вопрос задан
  • 230 просмотров
Пригласить эксперта
Ответы на вопрос 2
@dimuska139
Backend developer
С помощью EXPLAIN проанализируй запрос и попробуй построить индексы
Ответ написан
VladimirAndreev
@VladimirAndreev
php web dev
попробуй один JOIN на wp_postmeta и на него условия типа

((pm.meta_key='key1' and pm.meta_value in(1,2,3)) or (pm.meta_key='key2' and pm.meta_value in(4,5,6)))
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы