非完美的解决方案是尽量减少查询所携带的信息量和副作用。这可以通过只请求post ID而不填充任何缓存来实现。
您的查询应该类似于
$query = new WP_Query(array(
...
\'fields\' => \'ids\',
\'cache_results\' => false,
\'update_post_meta_cache\' => false,
\'update_post_term_cache\' => false,
));
因此,您仍然获得了太多的信息—一个整数数组,而不是一个整数数组,但由于DB在任何情况下都必须对其进行检查,因此主要的开销可能是传输它的时间,如果您不希望有1000篇帖子与您的查询相匹配,那么这应该足够了。
与尝试找出所有必需的联接并编写适当的SQL相比,我更喜欢这种方法的原因是,它比SQL语句更易于读取和修改。仍然需要对其原因进行良好的评论。