博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php+mysql 大容量数据高效分页效果(弃用limit)
阅读量:6968 次
发布时间:2019-06-27

本文共 1832 字,大约阅读时间需要 6 分钟。

发现当表中有很多上万条数据时,越后的数据用limit分页显示就越慢(>2秒),可能是mysql的特性所致。所以花了点时间总结实现了更优解决方案,最终实现毫秒级响应。若网友有更优的,请留言,谢谢!

<?

/*
高效分页效果:
特点及优点:

1.不使用limit,当总记录数很大时,limit取后面的数据会很慢

2.保存主键值至数组,再截取最终需要的一段主键值,再放入sql in中,减少了数据库的负担。
步骤:
1.先取出所有记录的主键id值
2.保存id值入数组
3.根据当前页、每页数据量,获取需要返回记录的id串 ;implode(",",array_slice($conndb_arr,($page-1)*$page_size,$page_size));array_slice取出数组中的一段,implode组合数组为字符串
4.构造最终的sql语句 "$sql where id in(".implode(",",array_slice($conndb_arr,($page-1)*$page_size,$page_size)).")"
例子如下:
*/
if(isset($_GET["page"]))$page = intval($_GET["page"]);else $page = 1; //取出当前所在页,默认为1
$page_size =9; // 每页显示记录数 
//完整的查询
$sql="select id,title,addtime,visit,content,(select count(*) from blog_news where archive_id=blog_archive.id) as news_c,(select realname from users where id=blog_archive.users_id) as creator from blog_archive";
$sql_c="select id from blog_archive order by id desc";// 取出表所有id值 (强烈建议id为主键或已添加索引)
$result=conndb($sql_c);
if(getresult_right($result)){ //自定义的sql语句执行结果判断语句
$amount=mysql_num_rows($result);//得到总记录数
//$row =mysql_fetch_array($result);
while ($row =mysql_fetch_array($result)){ 
$conndb_arr[]=$row[0];//将所有id值存入数组
}
// 记算总共有多少页 
if( $amount ){ 
    if( $amount < $page_size ){ $page_count = 1; } //如果总数据量小于$PageSize,那么只有一页 
    if( $amount % $page_size ){ //取总数据量除以每页数的余数 
        $page_count = (int)($amount / $page_size) + 1; //如果有余数,则页数等于总数据量除以每页数的结果取整再加一 
    }else{ 
        $page_count = $amount / $page_size ; //如果没有余数,则页数等于总数据量除以每页数的结果 
    } 
} else $page_count = 0; 
if($page>$page_count)$page=(int)$page_count;

if( $amount ){

//array_slice($conndb_arr,($page-1)*$page_size,$page_size)表示取出id数组中的一段,从($page-1)*$page_size开始取$page_size个

$result=conndb("$sql where id in(".implode(",",array_slice($conndb_arr,($page-1)*$page_size,$page_size)).")");
while ($row =mysql_fetch_array($result)){ //循环输出分页记录
echo $row[id]."<br>";
}else{
echo "没有找到任何记录!";
}
}
?>

转载地址:http://xsssl.baihongyu.com/

你可能感兴趣的文章
Deep Learning 工具收集
查看>>
jqGrid的分页
查看>>
iOS7 隐藏状态栏
查看>>
获取类的属性列表、方法列表、实例变量列表
查看>>
学习笔记:逻辑运算符也有优先级区别
查看>>
小蚂蚁学习Redis笔记(12)——Redis重要特性——发布及订阅消息
查看>>
Docker with CentOS
查看>>
js单双引号嵌套传值问题
查看>>
Unity 消息发送机制 解析
查看>>
浅析网络端口及端口防御
查看>>
PDF文件在线压缩的方法
查看>>
将dwg格式CAD图纸快速转换成彩色BMP格式如何操作?
查看>>
【centreon监控】启用短信和邮件报警
查看>>
linux错误---UNEXPECTED INCONSISTENCY; RUN FSCK MANUALLY
查看>>
Python之列表
查看>>
马哥第3期运维班第五周作业
查看>>
nginx的简单rewrite规则和开启密码认证功能
查看>>
【RHEL5.5】Linux下RPM包安装GCC
查看>>
python 集合、函数
查看>>
《从零开始学Swift》学习笔记(Day43)——构造函数继承
查看>>