我有一个庞大的数据库,有25万多个帖子。我已经运行了所有我可以做的优化工作,并在互联网上搜索了所有可能的解决方案。
假设我有一个查询,在这里我想从一个类别中获得最后4个帖子:
$recent = new WP_Query(array( 'cat' => '8', 'posts_per_page' => '4')); 哪个查询监视器转换为:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
LEFT JOIN wp_term_relationships
ON (wp_posts.ID = wp_term_relationships.object_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (8,9,10,11,12,13,14,15) )
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_status = 'private')
GROUP BY wp_posts.ID
ORDER BY wp_posts.post_date DESC
LIMIT 0, 4我的问题是,如果我将相同的查询放在phpmyadmin中并更改这一行,为什么:
AND ( wp_term_relationships.term_taxonomy_id IN (8,9,10,11,12,13,14,15) )转到
AND ( wp_term_relationships.term_taxonomy_id IN (8) )查询速度是原来的两倍(0.5077秒)。为什么它只搜索"8“-类别id时搜索其他分类法id?欢迎提出任何建议。
谢谢
发布于 2018-03-11 11:14:02
正如@milo在评论中所说的那样,cat参数(以及其他层次化分类法中的类似参数)也会使查询在子类别中显示出来。如果不希望发生这种情况,请使用category__in参数。
至于一般的缓慢程度,很难猜测,但这取决于您的DB服务器性能(可能是在恒定负载下,是时候升级它了),以及表中那些帖子有多深。
最后但并非最不重要的一点是,如果您不需要关于有多少匹配结果超出您的限制的信息,您应该尝试将'no_found_rows' => true添加到您的查询中。这样,DB就不会试图计算类别中的总发帖数(查询的SQL_CALC_FOUND_ROWS部分)。
https://wordpress.stackexchange.com/questions/296413
复制相似问题