需要了解查询帖子的复杂性

时间:2016-02-09 14:06:10

标签: php mysql wordpress

我试图了解有关在wordpress中查询帖子的过程:

假设我有这段代码:

$args = array{
    'cat' => 'animals',
    'posts_per_page' => 3
}

$the_query = new WP_Query($args);

所以理论上wordpress会进入数据库,浏览所有帖子,对于每个帖子,从第一个到最后一个,它“询问”帖子的类别,如果答案是“动物”它抓住那个帖子和移动到之后,如果类别是别的,它会跳过该帖子并移到后面的那个。并重复这个过程n次? 或者,因为我将posts_per_page设置为3,在匹配“动物”的第三个帖子之后,它会停止的过程?

如果答案是第一个,我怎么能优化代码,如果我说在“动物”下我有300个帖子,但我只需要最新的3.我怎么能告诉wordpress在第三个之后停止检查匹配“动物”?

我问这个,因为我正在为超过40000个帖子的网站制作一个自定义主题,主页需要至少有5个不同的查询,如上所述,我想让它尽可能高效

我希望这是有道理的。

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果您查看WP核心,您会在wp-includes/query.php函数的get_posts中看到这段代码:

if ( empty($q['offset']) ) {
    $pgstrt = absint( ( $page - 1 ) * $q['posts_per_page'] ) . ', ';
} else { // we're ignoring $page and using 'offset'
    $q['offset'] = absint($q['offset']);
    $pgstrt = $q['offset'] . ', ';
}
$limits = 'LIMIT ' . $pgstrt . $q['posts_per_page'];

这意味着posts_per_page参数被转换为基本的sql LIMIT。所以你不必担心这方面的表现。

How does 'LIMIT' parameter work in sql?

考虑到wp_terms_taxonomy.term_taxonomy_idwp_terms_taxonomy.term_id_taxonomywp_term_relationships.term_taxonomy_id都是索引,LIMIT不应该选择所有行,据我所知。