Mysql Wordpress对wp_帖子的慢速查询
我们有一个wordpress数据库,在wp_帖子中有200万条记录,NewRelic显示我们有几个缓慢的查询,但这一个需要时间Mysql Wordpress对wp_帖子的慢速查询,mysql,wordpress,performance,Mysql,Wordpress,Performance,我们有一个wordpress数据库,在wp_帖子中有200万条记录,NewRelic显示我们有几个缓慢的查询,但这一个需要时间 SELECT wp_posts.ID FROM wp_posts WHERE ?=? AND wp_posts.post_type = ? AND ((wp_posts.post_status = ?)) ORDER BY wp_posts.post_title ASC LIMIT ?, ? 它解释了这一点: 我不知道如何优化这个查询,但我想我需
SELECT wp_posts.ID
FROM wp_posts
WHERE ?=? AND wp_posts.post_type = ? AND ((wp_posts.post_status = ?)) ORDER BY wp_posts.post_title ASC
LIMIT ?, ?
它解释了这一点:
我不知道如何优化这个查询,但我想我需要添加一个带有id、post_类型、post_状态和post_标题的索引。您需要的是INDEXtype、status、title、id。但这不起作用,因为索引中不能有post_title列中的文本
因此,没有优化,也没有有用的索引
可湿性粉剂不是按比例设计的。200万行是很多,但并不像加入Posteta或其他表那样糟糕
此查询需要收集特定类型和状态的所有标题,对它们进行排序,跳过偏移量,最后传递一些ID
如果由于分页而使用偏移量,则会出现第二个问题-当用户在列表中翻页时,查询速度会越来越慢。注意我提到的跳过步骤
如果您可以根据版本和字符集字符将标题限制在255或191以下,那么我提到的索引将起作用,而且工作速度会快得多。这将涉及并更改表,将post_标题更改为VARCHAR。。。如果任何标题被截断,这将需要一些时间并丢失数据
一个可能的解决方案。。。由于向用户交付200万行是不合理的,我们能猜到类型和/或状态是有选择性的吗?也就是说,真的最多只有几百行吗?在这种情况下,这可能有助于:
INDEX(post_type, post_status) -- in either order.