繁体   English   中英

如何获得此MySql WordPress查询以更快地运行?

[英]How can I get this MySql WordPress query to run faster?

我在WordPress中针对一些非常大的表运行以下查询。 有没有办法重新组织它,使其运行更快? 目前,这需要8秒钟,对于我的用例来说,这太慢了,我需要将其称为60万次。 wp_term_taxonomy.term_id = 18位将是动态的,如下所示: wp_term_taxonomy.term_id = category_id

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)
           );

由于不存在tmp表中的索引,因此使用多个JOIN子查询的效率特别低。 (是的,5.6动态添加了一个索引,但是效率仍然较低。)

而是将JOIN插入表,而不是子查询:

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

(其他同上,但使用不同的别名)

(这是为什么EAV模式令人痛苦的一个示例。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM