WordPress查询使网站变得非常慢

时间:2017-10-04 作者:hammed

我怎样才能改进这个wordpress查询,它让网站变得非常慢!

SELECT wp_posts.ID
FROM wp_posts 
INNER JOIN wp_postmeta
ON ( wp_posts.ID = wp_postmeta.post_id ) JOIN wp_icl_translations t 
ON wp_posts.ID = t.element_id 
AND t.element_type = CONCAT(\'post_\', wp_posts.post_type) 
WHERE 1=1 
AND ( wp_postmeta.meta_key = \'post_views_count\' )
AND wp_posts.post_type = \'post\'
AND ((wp_posts.post_status = \'publish\'))
AND ( ( t.language_code = \'fr\'
AND wp_posts.post_type IN (\'post\',\'page\',\'attachment\',\'grille\',\'podcast\',\'equipe\' ) )
OR wp_posts.post_type NOT IN (\'post\',\'page\',\'attachment\',\'grille\',\'podcast\',\'equipe\' ) )
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value+0 DESC
LIMIT 0, 3

1 个回复
SO网友:Milan Petrovic

我做了一些更改:

SELECT wp_posts.ID
FROM wp_posts
INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
INNER JOIN wp_icl_translations t ON wp_posts.ID = t.element_id
WHERE 1=1 
AND t.element_type = CONCAT(\'post_\', wp_posts.post_type) 
AND wp_postmeta.meta_key = \'post_views_count\'
AND wp_posts.post_type = \'post\' 
AND wp_posts.post_status = \'publish\'
AND (
    (t.language_code = \'fr\' AND wp_posts.post_type IN (\'post\',\'page\',\'attachment\',\'grille\',\'podcast\',\'equipe\')) 
    OR
    wp_posts.post_type NOT IN (\'post\',\'page\',\'attachment\',\'grille\',\'podcast\',\'equipe\')
)
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value+0 DESC
LIMIT 0, 3
加入wp_icl_translations 将更改为内部联接,并将一个联接条件移动到WHERE块。

但是,你需要确保element_idelement_type 中的列wp_icl_translations 表都已编制索引。否则,此查询将始终很慢。

EDIT:但是,速度慢的原因是您使用的列的顺序,该列无法为排序编制索引。按非索引列排序非常、非常、非常慢,而且考虑到您有一个大型数据库,如果您现在继续使用ORDER by,则无法对其进行优化,因为您有一个复杂的查询。

结束

相关推荐

列出分类法:如果分类法没有POST,就不要列出分类法--取决于定制的POST-META?

这可能很难解释,我不知道是否有解决办法!?我有一个名为“wr\\u event”的自定义帖子类型和一个名为“event\\u type”的分层自定义分类法。自定义帖子类型有一个元框,用于event_date 并且与此帖子类型关联的所有帖子都按以下方式排序event_date. 我在循环中有一个特殊的条件来查询event_date 已经发生了-在这种情况下,它没有显示,但只列在我的档案中。就像你可以使用wp_list_categories() 我编写了一个自定义函数,它以完全相同的方式列出所有分类术语。现在