首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >慢SQL_CALC_FOUND_ROWS查询

慢SQL_CALC_FOUND_ROWS查询
EN

WordPress Development用户
提问于 2015-09-04 20:36:29
回答 2查看 6.2K关注 0票数 4

在使用SQL_CALC_FOUND_ROWS的WordPress管理部分中,我们的查询性能非常慢。

我们目前在我们的站点上有大约125,000篇文章,并且使用Varnish缓存前端,并且在WordPress版本4.2.3上。

当有人使用WordPress的管理部分时会出现问题,WordPress将运行如下所示的查询:

代码语言:javascript
复制
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID 
FROM wp_posts 
WHERE 1=1 AND (((wp_posts.post_title LIKE '%denali%') 
OR (wp_posts.post_content LIKE '%denali%'))) 
AND wp_posts.post_type = 'post' 
AND (wp_posts.post_status = 'publish' 
OR wp_posts.post_status = 'future' 
OR wp_posts.post_status = 'draft' 
OR wp_posts.post_status = 'pending' 
OR wp_posts.post_status = 'private') 
ORDER BY wp_posts.post_title LIKE '%denali%' DESC, 
wp_posts.post_date DESC LIMIT 0, 20 

是否有修复此问题的修补程序,或者可以运行某种pre_get_posts筛选器?

我计划删除一些post版本并进行一些DB优化,但首先想知道在WordPress中是否存在某种修复方法。

我在寻找这个问题时遇到过类似的问题,但大多数问题似乎都有2-6年的历史了。

EN

回答 2

WordPress Development用户

发布于 2017-06-22 19:13:43

SQL_CALC_FOUND_ROWS的使用并不是一个真正的问题,尽管它会带来一些开销。

所发生的情况是,WordPress使用SQL_CALC_FOUND_ROWS来确定如果没有提供LIMIT子句将返回的总帖子。这是必要的,以计算和提供正确的分页链接。

无条件地禁用它是保证破坏整个地方的东西。

如果您可以识别使用它的特定查询,并且不需要分页,那么您可以将pre_get_posts挂钩并有条件地将no_found_rows参数设置为true。然而,这与其说是一种解决方案,不如说是一种黑客行为。

正确的解决方案是在数据库端使用数据库查询缓存机制,或者在WordPress端使用高级后缓存 (为WordPress.com开发和使用)等插件。

票数 1
EN

WordPress Development用户

发布于 2017-02-23 14:09:04

$query->set(‘no_found_row’,true);

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

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

复制
相关文章

相似问题

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