如何优化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我使用了缓存和对象缓存。但是,随着一篇新文章的发布,缓存将失败,服务器负载将过高。这个问题已经困扰了很长一段时间,并导致网站运行缓慢。
发布于 2019-03-14 01:33:10
为了减少此查询的加载时间,您可以做的最明显的两件事是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
如果您依赖用户请求来创建缓存,那么在完全构建缓存之前,它可能会导致用户多次请求相同的结果,这并不是一个很好的位置。
如果你能在你的网站前得到像清漆这样的东西,那会有很大帮助。清漆可以防止大多数请求触及php,并且它在处理请求时非常快速。
https://wordpress.stackexchange.com/questions/331576
复制相似问题