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

  • 时间:
  • 浏览:5
  • 来源:uu快3大小_uu快3网站_开奖历史

if( $amount ){

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;

发现当表涵盖什么都有上万条数据时,越后的数据用limit分页显示就越慢(>2秒),将会是mysql的底部形态所致。什么都有花了点时间总结实现了更优避免方案,最终实现毫秒级响应。若网友视频 有更优的,请留言,谢谢!

<?

/*

高效分页效果:

特点及优点:

//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 "只能找到任何记录!";

}

}

?>