我试图了解有关在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个不同的查询,如上所述,我想让它尽可能高效
我希望这是有道理的。
提前致谢!
答案 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_id
,wp_terms_taxonomy.term_id_taxonomy
,wp_term_relationships.term_taxonomy_id
都是索引,LIMIT
不应该选择所有行,据我所知。