我做了一些更改:
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_id 和element_type 中的列wp_icl_translations 表都已编制索引。否则,此查询将始终很慢。
EDIT:但是,速度慢的原因是您使用的列的顺序,该列无法为排序编制索引。按非索引列排序非常、非常、非常慢,而且考虑到您有一个大型数据库,如果您现在继续使用ORDER by,则无法对其进行优化,因为您有一个复杂的查询。