此查询可以工作,但在四核专用服务器上运行需要20秒以上。。。如何对此进行优化?
$slides=get_posts(
array(\'post_type\' => \'any\', \'numberposts\' => 5, \'orderby\' => \'date\', \'order\' => \'desc\', "tax_query" =>
array(
"relation" => "OR",
array(
"field" => "id",
"terms" => array(36),
"taxonomy" => "category",
"operator" => "IN"
),
array(
"field" => "id",
"terms" => array(36),
"taxonomy" => "music-categories",
"operator" => "IN"
),
array(
"field" => "id",
"terms" => array(36),
"taxonomy" => "video-categories",
"operator" => "IN"
),
array(
"field" => "id",
"terms" => array(36),
"taxonomy" => "mixtape-categories",
"operator" => "IN"
)
)
)
);
SO网友:Mark Kaplun
使用显式post类型,即。\'post_type\' => array(\'post\',\'music\'...)
. 现在,您的查询也会检查修订和附件,它们可能是DB中帖子的一半。
从您的代码中,您似乎应该提前知道哪个分类法与您的查询相关(术语编号36不太可能在所有4种分类法中都有相关的含义)。您应该只查询相关的分类法。
如果您只需要5篇最新发布的帖子,那么您可能应该在添加新帖子时即时计算,避免使用查询。
add_action(\'publich_post\',\'my77483_change_cache\');
function my77483_change_cache($post_id,$post) {
if (not meeting criteria)
return;
$chached = get_option(\'my77483_query_cache\');
if (count($cached) == 5)
array_shift($cached); // remove the oldest post.
$cached[] = $post_id;
update_option(\'my77483_query_cache\',$cached);
}
这样您的查询
$chached = get_option(\'my77483_query_cache\');
$posts = get_posts(\'post__in\' => $cached);
唯一的问题是在delete中要做什么,然后也许应该运行原始查询,但这应该是一个非常罕见的事件。
SO网友:fischi
要检查查询本身是否变慢或其他任何操作是否会使其变慢,请尝试直接在数据库中运行查询,并查看查询需要多长时间。
<?php echo $GLOBALS[\'wp_query\']->request; ?>
这将显示WordPress在数据库中运行的最新查询。
如果数据库中的查询速度非常慢,请尝试缓存结果,大约每小时只运行一次此特定查询。我通常用菜单来做这件事,但它对任何东西都有效。使用瞬态保存输出HTML。
我写过这个技巧here.
如果不同的分类需要不同的输出,请尝试在瞬态名称中添加TermID。
您可以在“update\\u post”上删除瞬态,或者让它们在特定时间后过期。