我只是想展示一下total number 与某些条件(参数)匹配的自定义帖子数。
我是否必须进行整个查询(get\\u posts,query\\u posts…)并获得found_posts 还是有更有效的方法来查询总数?
例如(使用事件插件),
$args = array(
\'posts_per_page\' => -1,
\'post_type\' => \'event\',
\'suppress_filters\' => false,
\'showpastevents\' => true,
\'post_status\' => \'published\',
\'group_events_by\' => \'series\',
\'meta_query\' => array(
array(
\'key\' => \'_event_public\',
\'value\' => \'1\',
)
)
);
$q_posts = get_posts($args);
$alltime_events = count($q_posts);
给了我1344个事件。这不是一个效率低下的查询吗?
编辑:
我已添加
\'fields\' => \'ids\'
对于查询参数,只检索ID而不是整个post对象,但我只是猜测这可能会节省一些工作。
最合适的回答,由SO网友:Mark Kaplun 整理而成
“效率”问题有三个方面。
从DB方面来看,大部分时间都花在遍历DB表上。如果需要所有行,那么无论返回什么信息,都需要DB遍历所有行。在内存中保存数据可能会带来一定的成本,但相对于遍历成本而言,成本应该可以忽略不计。
对于通信方面,很明显,传输的信息越小,传输完成的速度就越快。很难猜测影响是什么,因为这将取决于DB是否在同一主机上,以及是否对网络质量没有影响。这是您可以而且应该通过使用“fields”=>“ids”来处理的,或者通过创建只返回数字的SQL查询来处理。在我看来,“fields”=>“ids”更符合wordpress代码的预期工作方式,即使它不是最佳的,也应该是首选方式。
如果你do not 指定要返回的特定字段集,如“fields”=>“ids”,默认情况下,wordpress将生成查询,这些查询将初始化与返回的帖子相关的分类法和元缓存,因此,如果您知道您对该信息不感兴趣,则应“将其关闭”。相关标志为cache_results
可用于禁用所有相关缓存,或更具体的update_post_meta_cache
和update_post_term_cache