optimise SQL wordpress call

时间:2014-01-15 作者:user44321

我有以下代码:

$querystr = "
SELECT *
FROM {$wpdb->prefix}posts
INNER JOIN {$wpdb->prefix}postmeta m1
  ON ( {$wpdb->prefix}posts.ID = m1.post_id )
INNER JOIN {$wpdb->prefix}postmeta m2
  ON ( {$wpdb->prefix}posts.ID = m2.post_id )
WHERE
{$wpdb->prefix}posts.post_type = \'produits\'
OR {$wpdb->prefix}posts.post_type = \'coupsdecoeur\'
AND {$wpdb->prefix}posts.post_status = \'publish\'
GROUP BY {$wpdb->prefix}posts.ID
ORDER BY {$wpdb->prefix}posts.post_date
DESC;
";
当加载包含如此慢的WWW的页面时,有什么技巧可以优化它吗?

我只需要帖子标题和一个名为“wpcf lien”的元值。

非常感谢。

3 个回复
SO网友:Geert

查询本身可能需要优化(虽然SQL不是我的专长)。但是,不要忘记,您可以将昂贵操作的结果存储在缓存内存中。WordPress提供Transients API 让事情变得简单。下面是一个简单的例子:

// Try to load the value from cache
$transient_key = \'my_query\';
$value = get_transient( $transient_key );

// If no cached value was found, perform the query and cache it
if ( false === $value ) {
    $value = $wpdb->get_results( \'SELECT * FROM ...\' );
    set_transient( $transient_key, $value, HOUR_IN_SECONDS );
}

SO网友:Emanuel Rocha Costa

您如何知道这是页面中的瓶颈?如果此查询确实存在问题,可以尝试在上添加索引post_typepost_status.

有很多缓存插件也可以为您处理这个问题。

SO网友:Otto

我的建议是停止尝试使用直接sql,而是使用普通的WP\\U查询。然后它会为您进行大量缓存。缓存插件可以帮助默认系统。

结束