原来你在https://www.4414.cn/forum.php?mod=viewthread&tid=169272&page=3#pid2158067 分享过第一种方法。
wepublish耗子分享:WordPress 祖传使用SQL_CALC_FOUND_ROWS进行数量统计并计算分页,但是这个查询语句在大数据量 (W+) 的情况下是很慢的,一个比较好的解决方法是将其替换成更为现代的COUNT语句:- <?PHP/** * Plugin Name: Fix WordPress Slow Queries * Description: Fix WordPress Slow Queries * Author: Mahdi Akrami * Version: 1.0.0 */class FIX_WP_SLOW_QUERY { public static function init () { /** * WP_Query */ add_filter ( 'found_posts_query', [ __CLASS__, 'add_found_rows_query' ], 999, 2 ); add_filter ( 'posts_request_ids', [ __CLASS__, 'remove_found_rows_query' ], 999 ); add_filter ( 'posts_pre_query', function ( $posts, \WP_Query $query ) { $query->request = self::remove_found_rows_query ( $query->request ); return $posts; }, 999, 2 ); add_filter ( 'posts_clauses', function ( $clauses, \WP_Query $wp_query ) { $wp_query->fw_clauses = $clauses; return $clauses; }, 999, 2 ); } public static function remove_found_rows_query ( $sql ) { return str_replace ( ' SQL_CALC_FOUND_ROWS ', '', $sql ); } public static function add_found_rows_query ( $sql, WP_Query $query ) { global $wpdb; $distinct = $query->fw_clauses['distinct'] ?? ''; $join = $query->fw_clauses['join'] ?? ''; $where = $query->fw_clauses['where'] ?? ''; $groupby = $query->fw_clauses['groupby'] ?? ''; $count = 'COUNT (*)'; if ( ! empty ( $groupby ) ) { $count = "COUNT ( distinct $groupby )"; } return " SELECT $distinct $count FROM {$wpdb->posts} $join WHERE 1=1 $where "; }}FIX_WP_SLOW_QUERY::init ();
复制代码 |