使用SQL_CALC_FOUND_ROWS
在WordPress的管理部分。
我们目前在我们的网站上有大约125000篇帖子,使用Varnish缓存前端,并使用WordPress版本4.2.3。
当有人使用WordPress的admin部分时,问题就会出现,WordPress将运行如下查询:
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
我可以运行的筛选器?
我计划删除一些后期修订并进行一些DB优化,但首先想看看WordPress中是否有对此的某种修复。
我在搜索时也遇到过类似的问题,但大多数问题似乎都是2-6年前的问题。
SO网友:Anastis
使用SQL_CALC_FOUND_ROWS
这不是一个真正的问题,尽管它会带来开销。
WordPress使用SQL_CALC_FOUND_ROWS
为了确定如果没有返回的员额总数LIMIT
提供了第条。为了计算并为您提供正确的分页链接,这是必要的。
无条件禁用它肯定会破坏所有东西。
如果您可以识别因其使用而受到影响的特定查询,并且可以不分页,那么您可以连接到pre_get_posts
并有条件地设置no_found_rows
参数设置为true。然而,这与其说是一种解决方案,不如说是一种黑客行为。
正确的解决方案是使用数据库查询缓存机制,或者在数据库一侧,或者在WordPress一侧使用插件,例如Advanced Post Cache (为WordPress.com开发并使用)