META_QUERY的WP_QUERY性能问题

时间:2012-10-10 作者:Kevin Leary

我正在为使用WP_Query 实例从具有2个非空自定义字段的2种帖子类型中选择帖子。根据现场的具体情况$current_zone 变量可以设置为确定要从中查询的类别。

// Custom loop
$paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;
$custom_loop_args = array(
    \'post_type\' => array(\'videos\', \'post\'),
    \'post_status\' => \'publish\',
    \'ignore_sticky_posts\' => 1,
    \'paged\' => $paged,
    \'meta_query\' => array(
        \'relation\' => \'OR\',
        array(
            \'key\' => \'article_source\',
            \'compare\' => \'!=\',
            \'value\' => \'\'
        ),
        array(
            \'key\' => \'article_link\',
            \'compare\' => \'!=\',
            \'value\' => \'\'
        )
    )
);

// Check the current zone
global $current_zone;

// Check for category match to current zone
if ( term_exists($current_zone, \'category\') ) {
    $term = get_term_by(\'name\', $current_zone, \'category\');
    $custom_loop_args[\'cat\'] = $term->term_id;
}

// Create unique identifier for caching
$cache_id = ( isset($term) ) ? \'_term-\' . $term->term_id : \'_main\';

// Run query or get transient cache
if ( ( $custom_loop = get_transient( "curated_wpquery$cache_id" ) ) === false ) {

    // It wasn\'t there, so regenerate the data and save the transient
    $custom_loop = new WP_Query( $custom_loop_args );
    set_transient( "curated_wpquery$cache_id", $custom_loop, ( 60 * 60 * 1 ) );
}
我正在使用瞬态来加速这一过程,这确实可行,但初始查询需要35秒和大量内存才能完成。我们有一个相当大的数据库,在posts 桌子我已经清除了修订,但没有注意到性能的提高。

因此,我真正的问题是,如何提高此查询的性能?会是一种习惯吗$wpdb 查询是最好的,还是以这种方式查询自定义字段完全没有效果?

非常感谢您的帮助。

1 个回复
最合适的回答,由SO网友:anu 整理而成

自定义字段数据存储在postmeta 表,很可能是扫描此表导致速度变慢。

您应该:

安装debug bar plugin 这将让您更深入地了解针对数据库执行的查询——您将能够看到每个查询需要多长时间,以及正在执行的实际SQL代码EXPLAIN them. 这将使您更好地了解正在发生的事情以及如何进行

结束

相关推荐

如何将jQuery脚本添加到一个页面?

将单个脚本应用于特定页面的最佳实践是什么?当我尝试应用整个页面的脚本时,它与其他插件有问题。有经验法则吗? <script src=\"https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js\"></script> <script> (function() { $(\'html\').addClass(\'js\'); &#x