Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql Wordpress对wp_帖子的慢速查询_Mysql_Wordpress_Performance - Fatal编程技术网

Mysql Wordpress对wp_帖子的慢速查询

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 ?, ? 它解释了这一点: 我不知道如何优化这个查询,但我想我需

我们有一个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 ?, ? 
它解释了这一点:

我不知道如何优化这个查询,但我想我需要添加一个带有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.