Very slow query

时间:2012-12-28 作者:b747fp

此查询可以工作,但在四核专用服务器上运行需要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"
            )
            )
        )
);

2 个回复
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”上删除瞬态,或者让它们在特定时间后过期。

结束

相关推荐

自定义字段后端的jQuery

我需要一些帮助,因为我想在编辑后屏幕上的一些自定义字段上使用jquery(可能还有css)。我真正需要的是制造,和。当用户键入一个数字时,神奇地显示为apear:类型100,jquery将其设置为1,00,依此类推。我使用插件类型创建的自定义字段名为wpcf imovel preco。我不知道如何使用jquery操作后端的元素:(,仅此一点就很有帮助,所以我知道从哪里开始!