停止所有SQL_CALC_FOUND_ROWS WordPress查询

时间:2019-11-23 作者:user178785

在phpmyadmin中,我经常看到挂起状态为“发送数据”的查询:

SELECT SQL_CALC_FOUND_ROWS  wp2a_posts.ID FROM wp2a_posts  WHERE 1=1  AND wp2a_posts.post_author IN (1)  AND wp2a_posts.post_type = \'post\' AND (wp2a_posts.post_status = \'publish\')  ORDER BY wp2a_posts.post_date DESC LIMIT 0, 3

enter image description here

我想禁用此功能或执行任何必要的操作,以便不需要运行这些查询,因为我的apache状态不断被“发送回复”上的连接填满,并且我的网站不断遭受停机,这可能是主要原因。

根据How to disable `SQL_CALC_FOUND_ROWS` WP_Query 需要修改以修复此问题,因此不会使用SQL\\u CALC\\u FOUND\\u ROWS查询,但我不知道在哪里编辑WP_Query 或者查看它在我的主题文件中的任何位置引用;Query causing load because of SQL_CALC_FOUND_ROWS post counting? 也没有给出明确的答案。根据https://wpartisan.me/tutorials/wordpress-database-queries-speed-sql_calc_found_rows 以下代码可以放入函数中。php的活动主题来阻止它:

if ( ! function_exists( \'wpartisan_set_no_found_rows\' ) ) :

    /**
     * Sets the \'no_found_rows\' param to true.
     *
     * In the WP_Query class this stops the use of SQL_CALC_FOUND_ROWS in the
     * MySql query it generates.
     *
     * @param  WP_Query $wp_query The WP_Query instance. Passed by reference.
     * @return void
     */
    function wpartisan_set_no_found_rows( \\WP_Query $wp_query ) {

        if ( $wp_query->is_main_query() ) {

            $wp_query->set( \'no_found_rows\', true );

        }
    }
endif;
add_filter( \'pre_get_posts\', \'wpartisan_set_no_found_rows\', 10, 1 );
我尝试了这一点,但SQL\\u CALC\\u FOUND\\u ROWS查询仍然不断出现。我还可以做些什么使SQL\\u CALC\\u FOUND\\u ROWS查询不运行?

1 个回复
最合适的回答,由SO网友:user178785 整理而成

使用查询监视器,我能够找到这个查询的来源,它来自一个插件“starbox”,该插件使用查询从给定帖子的作者那里获取最后3篇帖子。通过注释掉插件运行的部分来编辑插件,此查询解决了问题。