在大量文章下,分页速度非常慢

时间:2019-03-14 作者:user111527

如何优化sql?

SELECT 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 (7,8,14,104,134,234,289,331,4656,4657,6038,6039,6040,6085,6562,6563) )
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 2480, 20
我使用了缓存和对象缓存。但随着一篇新文章的发布,缓存将失败,服务器负载将过高。这个问题已经困扰了很长一段时间,导致网站运行缓慢。

1 个回复
SO网友:MikeNGarrett

为了减少此查询的加载时间,您可以做的两件最明显的事情是IN 语句和LIMIT 陈述

在中检查的项目数越大IN 语句,则查询效率越低。请参见:https://stackoverflow.com/questions/4514697/mysql-in-operator-performance-on-large-number-of-values

偏移量导致性能问题的原因是mysql的计数效率低下。请参见:https://stackoverflow.com/questions/4481388/why-does-mysql-higher-limit-offset-slow-the-query-down

如果可以的话,我建议在新文章发布后加热缓存。这将重置缓存,通过系统进程而不是用户请求来重建缓存。请参见:https://stackoverflow.com/questions/434259/what-is-a-warm-up-cache

如果依赖用户请求来创建缓存,则可能会导致用户在完全构建缓存之前多次请求相同的结果,这不是一个很好的位置。

如果你能在你的网站前面得到类似清漆的东西,那将非常有用。Varnish可以防止大多数请求访问php,而且它在服务请求方面的速度非常快。

相关推荐

更新MySQL查询以使其再次运行

我继承了一个我的客户不想重建的旧WordPress站点。函数中有一个旧的MySQL查询。主题的php,应该将类别图像与类别放在一起。当然,随着时间的推移,WordPress已经更新,查询也不再有效。我希望有人能帮我建议如何更新这个。代码为:function catImg($catId){ $data = mysql_fetch_object(mysql_query(\'SELECT * FROM `wp_ig_caticons` WHERE `cat_id` = \"\'. $catId