php+mysql 大容量数据高效分页效果(弃用limit)
发现当表中有很多上万条数据时,越后的数据用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)相关推荐
- php mysql 高效,php+mysql 大容量数据高效分页效果(弃用limit)
发现当表中有很多上万条数据时,越后的数据用limit分页显示就越慢(>2秒),可能是mysql的特性所致.所以花了点时间总结实现了更优解决方案,最终实现毫秒级响应.若网友有更优的,请留言,谢谢! ...
- 基于el-table和el-pagination实现数据的分页效果
基于el-table和el-pagination实现数据的分页效果 当我们使用el-table(表格) 和 el-pagination(分页),要实现el-table 表格存放数据, el-pagin ...
- MySQL大数据量分页查询方法及其优化
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:收藏了!7 个开源的 Spring Boot 前后端分离优质项目个人原创+1博客:点击前往,查看更多 链接:ht ...
- mysql大数据量分页的一些做法
随着公司业务的增长,数据库的数据也呈指数级增长,拿订单表为例,之前公司的订单表每天只有几千个,一个月下来不超过十万.而现在每天的订单大概就是2w+,目前订单表的数据已经达到了700w.这带来了各种各样 ...
- easyui分页查询为什么会有下拉框_6个针对MySQL大数据量分页查询优化的锦囊妙计...
作者:大神养成记转载来源:http://sina.lt/gauW 方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M ...
- 千锋重庆Java学习之MySQL大数据量分页查询方法及其优化
方法1: 直接使用数据库提供的SQL语句 语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N 适应场景: 适用于数据量较少的情况(元组百/千级) 原因/缺 ...
- MYSQL大数据量分页查询优化 - 十万、百万级优化
1. 常见问题 在mysql大数据量的基础下,分页中随着页码的增加,查询时间也会响应的增加.所以到了百万级别的数据量时,我们就需要优化已有的查询代码进行合理有效的分页. 一般情况下,页码与查询时间成正 ...
- Flask+MySQL大数据表格分页显示
1.显示效果 界面主要由两部分完成 顶部搜索栏:按条件传参给后端请求,控制表格数据重载刷新 底部表格:接收后端返回JSON数据,对表格渲染显示 2.前端传参 前端采用Layui框架渲染,对页码和条数传 ...
- mysql一样的查询在我本地很快但是线上很慢_MySQL大数据量分页查询方法及其优化...
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适 ...
最新文章
- swiper切换按钮位置改变_swiper插件自定义切换箭头按钮
- mysql实时物化到clickhouse(MaterializeMySQL)
- Base64编码运用与基本原理
- javascript事件详细说明
- SAP Spartacus里的WindowRef对象
- hibernate get() load() 区别
- 前端开发 常用选择符与权重0229
- “现男友”来了!荣耀手机正式官宣
- Java 文件高效写入方法
- python变量作用域图解_简单了解Python变量作用域正确使用方法
- DropDownList的AppendDataBoundItems属性
- 对深度学习程序进行性能优化之前该理解的几个知识点(一)
- 关键词抽取——结巴分词
- php curl 客户端,php通过curl设置客户端cookie
- 最新 lineageos 编译过程 详细过程
- 智能睡眠监控APP开发有哪些好处?
- Java什么是面向对象和面向对象特性
- 每周一磁 · 矫顽力Hcb和内禀矫顽力Hcj
- 抖音安心购有假货吗?四川鹰迪
- GAT-图注意力模型