发现当表中有很多上万条数据时,越后的数据用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 "没有找到任何记录!";
}
}
?>

php+mysql 大容量数据高效分页效果(弃用limit)相关推荐

  1. php mysql 高效,php+mysql 大容量数据高效分页效果(弃用limit)

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

  2. 基于el-table和el-pagination实现数据的分页效果

    基于el-table和el-pagination实现数据的分页效果 当我们使用el-table(表格) 和 el-pagination(分页),要实现el-table 表格存放数据, el-pagin ...

  3. MySQL大数据量分页查询方法及其优化

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 链接:ht ...

  4. mysql大数据量分页的一些做法

    随着公司业务的增长,数据库的数据也呈指数级增长,拿订单表为例,之前公司的订单表每天只有几千个,一个月下来不超过十万.而现在每天的订单大概就是2w+,目前订单表的数据已经达到了700w.这带来了各种各样 ...

  5. easyui分页查询为什么会有下拉框_6个针对MySQL大数据量分页查询优化的锦囊妙计...

    作者:大神养成记转载来源:http://sina.lt/gauW 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M ...

  6. 千锋重庆Java学习之MySQL大数据量分页查询方法及其优化

    方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...

  7. MYSQL大数据量分页查询优化 - 十万、百万级优化

    1. 常见问题 在mysql大数据量的基础下,分页中随着页码的增加,查询时间也会响应的增加.所以到了百万级别的数据量时,我们就需要优化已有的查询代码进行合理有效的分页. 一般情况下,页码与查询时间成正 ...

  8. Flask+MySQL大数据表格分页显示

    1.显示效果 界面主要由两部分完成 顶部搜索栏:按条件传参给后端请求,控制表格数据重载刷新 底部表格:接收后端返回JSON数据,对表格渲染显示 2.前端传参 前端采用Layui框架渲染,对页码和条数传 ...

  9. mysql一样的查询在我本地很快但是线上很慢_MySQL大数据量分页查询方法及其优化...

    MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...

最新文章

  1. swiper切换按钮位置改变_swiper插件自定义切换箭头按钮
  2. mysql实时物化到clickhouse(MaterializeMySQL)
  3. Base64编码运用与基本原理
  4. javascript事件详细说明
  5. SAP Spartacus里的WindowRef对象
  6. hibernate get() load() 区别
  7. 前端开发 常用选择符与权重0229
  8. “现男友”来了!荣耀手机正式官宣
  9. Java 文件高效写入方法
  10. python变量作用域图解_简单了解Python变量作用域正确使用方法
  11. DropDownList的AppendDataBoundItems属性
  12. 对深度学习程序进行性能优化之前该理解的几个知识点(一)
  13. 关键词抽取——结巴分词
  14. php curl 客户端,php通过curl设置客户端cookie
  15. 最新 lineageos 编译过程 详细过程
  16. 智能睡眠监控APP开发有哪些好处?
  17. Java什么是面向对象和面向对象特性
  18. 每周一磁 · 矫顽力Hcb和内禀矫顽力Hcj
  19. 抖音安心购有假货吗?四川鹰迪
  20. GAT-图注意力模型

热门文章

  1. Linux 基金会透露未来 Linux 内核可能会引入形式验证
  2. zabbix加入TCP连接数及状态的监控
  3. QT_QSlider的总结
  4. UML类图、接口、包、关系
  5. 安卓AsyncTack详解
  6. Android 使用Application类保存应用的全局数据
  7. asp.net编程:asp.net中如何设置页面的编码
  8. frida hook so导出函数
  9. 域内主机间之共享文件(夹)访问
  10. Csharp: 拼音转汉字字符搜索字符串