我正在 MU wordpress 网站上工作,我在查询中遇到问题,执行时间太长。
SELECT wp_posts.* FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
INNER JOIN wp_terms ON (wp_term_taxonomy.term_id = wp_terms.term_id)
WHERE 1=1 AND wp_posts.blog_id = '1'
AND wp_term_taxonomy.taxonomy = 'post_tag'
AND wp_terms.slug IN ('rate')
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 20
这个查询是由wordpress执行的,执行需要30-40秒,这太长了。
- wp_posts:4,00,000 行
- wp_terms:2,50,000 行
- wp_term_relationship:2,30,000 行
- wp_term_taxonomy:2,60,000 行
我已经对(使用的)列建立了索引。
最佳答案
尝试解释如下。
将以下内容粘贴到 phpmyadmin 并执行它:-
EXPLAIN SELECT wp_posts.* FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
INNER JOIN wp_terms ON (wp_term_taxonomy.term_id = wp_terms.term_id)
WHERE 1=1 AND wp_posts.blog_id = '1'
AND wp_term_taxonomy.taxonomy = 'post_tag'
AND wp_terms.slug IN ('rate')
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 20
然后复制结果并将其粘贴到您原来的问题中。它将提供哪些表中使用了哪些键等详细信息。
关于mysql - WordPress 查询时间慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17105453/