当参数不满足时,WP查询是否跳过以检查下一条POST?

时间:2021-07-01 作者:doremember

如果一篇文章未能满足第一个参数(publish),wp query是否仍会进行元比较,还是会跳过以立即检查下一篇文章?

问题不在于输出,而在于wp查询在输出之前是如何工作的。例如,如果您有一个包含数千篇文章的数据库,而只有五篇文章被发布。我担心的是,如果对所有帖子进行元比较,查询速度会变慢。

示例代码:

$args = array(
    \'post_status\'  => \'publish\',
    \'meta_key\'     => \'expiredate\',
    \'meta_value\'   => date( \'Ymd\' ),
    \'meta_compare\' => \'<\'
);
$my_query = new WP_Query($args);

1 个回复
SO网友:Tom J Nowell

wp query是否仍执行元比较

WP Query doesn\'t do comparisons, it asks the database to do them in an SQL query. MySQL/MariaDB does the comparison.

您需要通过通过EXPLAIN 查询以查看特定数据库安装如何计划查询。不同的数据库版本和配置可能表现不同。

如果你的怀疑是正确的,那么从WordPress的角度来看,你将无能为力。但这是一个骗局,一场白费力气的追逐。这不是一个您可以修复的问题,而且一切都会非常快,因为这个查询从根本上讲总是很慢。

请记住,因为它是post meta表,而该表不是为执行此类查询而设计的,因此默认情况下每页请求的post数为10,需要计算出页数,因此使用问题中的代码不可避免地要进行全表扫描。否则它怎么知道只有5个呢?

这个查询会很慢,但会很慢,因为您要求它按元数据过滤帖子ID,而该表不是为这些类型的查询设计的,这就是为什么要为类别和标记创建专用表,而不是将它们存储在帖子元数据中。meta_query 以及相关的meta_value 参数不可缩放,因为它涉及全表扫描。随着您的站点规模的增长,查询将变得越来越慢,越来越昂贵。为你的post meta设置一个数值将有助于缓解这种情况,而且你可能会问到更糟糕的post meta查询WP_Query 创建。

你的理想情况可能是,帖子有expired 通过常规cron作业自动添加的某种标记,但这是另一个需要另一个问题的主题。

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post