topbanner

WordPress禁用SQL_CALC_FOUND_ROWS查询并使用EXPLAIN方式重构

众所周知当WordPress内容数量较大的时候,SQL_CALC_FOUND_ROWS 是比较慢的,SQL执行的时间甚至会达到10倍那么夸张,所以最好别使用 MySQL 的 SQL_CALC_FOUND_ROWS 来获取总行数,下面的话提供WordPress禁用SQL_CALC_FOUND_ROWS查询并使用 EXPLAIN 方式重构的解决方法,代码如下:

//设置WP_Query的 'no_found_rows' 属性为true,禁用SQL_CALC_FOUND_ROWS
if ( !function_exists( 'set_no_found_rows' ) ) {
function set_no_found_rows(\WP_Query $wp_query)
{
$wp_query->set('no_found_rows', true);
}
}
add_filter( 'pre_get_posts', 'set_no_found_rows', 10, 1 );

if ( !function_exists( 'set_found_posts' ) ) {
function set_found_posts($clauses, \WP_Query $wp_query)
{
// 跳过单页
if ($wp_query->is_singular()) {
return $clauses;
}
global $wpdb;
$where = isset($clauses['where']) ? $clauses['where'] : '';
$join = isset($clauses['join']) ? $clauses['join'] : '';
$distinct = isset($clauses['distinct']) ? $clauses['distinct'] : '';
//使用 EXPLAIN 方式重构
$wp_query->found_posts = (int)$wpdb->get_row("EXPLAIN SELECT $distinct * FROM {$wpdb->posts} $join WHERE 1=1 $where")->rows;
$posts_per_page = (!empty($wp_query->query_vars['posts_per_page']) ? absint($wp_query->query_vars['posts_per_page']) : absint(get_option('posts_per_page')));
$wp_query->max_num_pages = ceil($wp_query->found_posts / $posts_per_page);
return $clauses;
}
}
add_filter( 'posts_clauses', 'set_found_posts', 10, 2 );

热 门 推 荐

WordPress 6.0发布!主要更新内容总结

2022-06-07

本篇文章给大家带来了关于wordpress的相关知识,WordPress 6.0近日正式发布,此次更新将数百个增强和修复交付到一个稳定的版本中,证明了WordPress社区的力量和能力,下面一起来看一下,希望对大家有帮助。 相关推荐:wordpress教程 ···

oracle怎么查询表的外键

2022-03-22 ,,

在oracle中,可以利用select语句来查询表的外键,语法“select * from user_cons_columns cl where cl.constraint_name = 外键名称;”。 本教程操作环境:Windows7系统、Oracle 11g版、Dell G3电脑。 外键就是表与表的关系,比如:一···

WordPress固定链接标题别名自动转换MD5码

对于习惯使用ID作为WordPress固定链接的用户而言,因为WordPress特殊的ID计算模式,中间其他元素例如图片等附件往往会占用ID,这就使得前端展示的文章ID很多时候都不连续,对于强迫症用户而言,看起来不是很舒服。安全性上而言,ID形···

怎么安装wordpress?详解安装教程(图文)

2022-02-26

怎么安装wordpress?下面本篇文章给大家介绍一下安装wordpress的详细教程(图文),希望对大家有所帮助! wordpress安装教程(图文) 1、下载程序 到wordpress官方网站下载wordpress程序,官方下载地址:下载 | WordPress.org China 简···

wordpress与PHP的区别是什么

2022-02-09 ,

wordpress与PHP的区别:PHP是一门在服务器端执行的脚本语言,一种编程语言;而WordPress是一款个人博客系统,是使用PHP语言开发的博客平台,功能都是现成的直接使用。 本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑 wordpr···

图解WordPress怎么安装主题(三种方式)

2022-02-06

下面由WordPress教程栏目给大家介绍关于WordPress安装主题的三种方式,希望对需要的朋友有所帮助!.markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:16px;overflow-x:hidden;color:#333}.markdown-···