首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >大型数据库上的慢速查询

大型数据库上的慢速查询
EN

WordPress Development用户
提问于 2018-03-10 23:55:06
回答 1查看 2.6K关注 0票数 1

我有一个庞大的数据库,有25万多个帖子。我已经运行了所有我可以做的优化工作,并在互联网上搜索了所有可能的解决方案。

假设我有一个查询,在这里我想从一个类别中获得最后4个帖子:

代码语言:javascript
复制
$recent = new WP_Query(array( 'cat' => '8', 'posts_per_page' => '4')); 

哪个查询监视器转换为:

代码语言:javascript
复制
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

,它需要1,4628秒。

我的问题是,如果我将相同的查询放在phpmyadmin中并更改这一行,为什么:

代码语言:javascript
复制
AND ( wp_term_relationships.term_taxonomy_id IN (8,9,10,11,12,13,14,15) )

转到

代码语言:javascript
复制
AND ( wp_term_relationships.term_taxonomy_id IN (8) )

查询速度是原来的两倍(0.5077秒)。为什么它只搜索"8“-类别id时搜索其他分类法id?欢迎提出任何建议。

谢谢

EN

回答 1

WordPress Development用户

回答已采纳

发布于 2018-03-11 11:14:02

正如@milo在评论中所说的那样,cat参数(以及其他层次化分类法中的类似参数)也会使查询在子类别中显示出来。如果不希望发生这种情况,请使用category__in参数。

至于一般的缓慢程度,很难猜测,但这取决于您的DB服务器性能(可能是在恒定负载下,是时候升级它了),以及表中那些帖子有多深。

最后但并非最不重要的一点是,如果您不需要关于有多少匹配结果超出您的限制的信息,您应该尝试将'no_found_rows' => true添加到您的查询中。这样,DB就不会试图计算类别中的总发帖数(查询的SQL_CALC_FOUND_ROWS部分)。

票数 0
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/296413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档