2016-02-20 3 views
0

У меня есть следующий запрос в WordPress, который работает с очень большими таблицами. Есть ли способ реорганизовать его, чтобы он работал быстрее? В настоящее время это занимает 8 секунд, и это слишком медленно для моего случая использования, когда мне нужно называть его 600K раз. Бит wp_term_taxonomy.term_id = 18 будет динамичным, как в: wp_term_taxonomy.term_id = category_idКак я могу заставить этот запрос WordPress MySql работать быстрее?

SELECT `ID` AS athlete_id, `post_title` AS athlete_name, `post_name` AS athlete_slug, 
     body_weight.weight, performance.speed 
    FROM `wp_posts` 
    INNER JOIN 
     (SELECT `post_id`, `meta_value` AS weight 
      FROM `wp_postmeta` 
      WHERE (`meta_key` = 'athlete_weight') 
    ) body_weight ON wp_posts.ID = body_weight.post_id 
    INNER JOIN 
     (SELECT `post_id`, `meta_value` AS speed 
      FROM `wp_postmeta` 
      WHERE (`meta_key` = 'athlete_speed') 
    ) performance ON wp_posts.ID = performance.post_id 
    LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) 
    LEFT JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = 
             wp_term_taxonomy.term_taxonomy_id) 
    LEFT JOIN wp_terms ON (wp_terms.term_id = wp_term_taxonomy.term_id) 
    WHERE wp_posts.post_status = 'publish' 
     AND wp_posts.post_type = 'athlete' 
     AND ((wp_term_taxonomy.taxonomy = 'athletics_category' 
         AND wp_term_taxonomy.term_id = 18) 
       OR (wp_terms.term_id is null) 
      ); 

ответ

0

Использование более одного JOIN подзапрос особенно неэффективно из-за отсутствия индекса в таблице TMP. (. Да, 5,6 добавляет индекс на лету, но это еще менее эффективным)

Вместо этого, РЕГИСТРИРУЙТЕСЬ к столу, а не подзапроса:

SELECT ... 
    ms.meta_value AS speed 
    ... 
FROM ... 
JOIN wp_postmeta AS ms 
    ON ms.post_id = wp_posts.ID 

(поддакивать для другого, но с использованием другой псевдоним)

(Это один пример того, почему EAV схемы являются боль.)

+0

спасибо! Разница драматична! Запрос теперь выполняется за 0,6 секунды ... – KalenGi

Смежные вопросы