WordPress自定义选择查询

时间:2012-09-01 00:04:46

标签: mysql wordpress select

我真的不太了解MySQL查询并且它正在显示。

我为每个帖子设置了自定义字段。自定义字段将帖子源URL存储在名为“source_url”的键中。

我使用下面的WP_Query参数,但是它非常慢。请记住,可以搜索50多个网址。

所以,给定一个源URL数组,我想获取匹配的帖子。

例如,以下是我目前在WP_Query中速度很慢的内容:

// var_dump of $urls array (this could be 50+ urls)
array(7) {
  [0]=>
  string(42) "http://www.youtube.com/watch?v=FMghvnqDhT8"
  [1]=>
  string(42) "http://www.youtube.com/watch?v=RY-yUFpXTnM"
  [2]=>
  string(58) "http://www.youtube.com/watch?v=nIm2dnyJ1Ps&feature=related"
  [3]=>
  string(42) "http://www.youtube.com/watch?v=NoCtRQlJAqM"
  [4]=>
  string(57) "http://holidaycustoms.blogspot.com/2012/08/busy-week.html"
  [5]=>
  string(42) "http://www.youtube.com/watch?v=DcZvg197Ie4"
  [6]=>
  string(42) "http://www.youtube.com/watch?v=7P3UEbLmLuo"
}

// Build Media Query
$meta_query = array(
    'relation' => 'OR'
);
foreach( $urls as $url ) {
    $meta_query[] = array(
                        'key'       => 'source_url',
                        'value'     => $url
                    );
}

// Get 20 matching posts from a category set by a variable
$args = array(
    'post_type'        => 'post',
    'posts_per_page'   => 20,
    'orderby'          => 'rand',
    'cat'              => $cat_ID,
    'meta_query'       => $meta_query
);
$posts = get_posts($args);        

我要做的是用自定义查询选择which I have read is much faster than WP_Query替换上面的代码。

但我不太了解MySQL或WP数据库来构建自定义选择查询。有人可以帮忙吗?提前致谢!

1 个答案:

答案 0 :(得分:0)

在您自己关联的帖子中,第一个回复已经说明了

  

[...]默认架构甚至没有值列

的索引

问题远远超过查询生成器的问题,因为没有索引,DBMS必须遍历整个表并比较每个字段的字符串。

使用PHPMyAdmin等适当的管理工具添加索引相当容易。您需要添加索引的违规表名为wp_postmeta,需要索引的字段为meta_value,索引类型应为INDEX

添加索引是透明的,除性能外不会影响wordpress。可能需要一些时间,因为MySQL需要遍历整个表。另外,因为您正在索引字符串数据,所以索引会非常大。


您还应该尝试为查询使用适当的结构。您当前正在使用具有不同值的大OR ed选项,但始终使用相同的字段。只有那个构造,它被称为IN

...
// Build Media Query
$meta_query = array();
$meta_query[] = array(
    'key'       => 'source_url',
    'value'     => $urls,
    'compare'   => 'IN'
);

// Get 20 matching posts from a category set by a variable
..

(未经测试。我实际上从未这样做过,Reference

与添加我假设的索引相比,性能提升可以忽略不计,但您的代码会变得更加简单。