haiyi124 2018-04-24 04:16 采纳率: 0%
浏览 561
已采纳

找大神帮忙优化phpcms分页效率

用phpcms建站,当内容达百万时分页效率会很低,有的分页执行时间长达数十秒,求熟悉phpcms的大神帮忙优化sql查询提升分页效率?

  • 写回答

3条回答 默认 最新

  • devmiao 2018-04-24 04:24
    关注

    PHP分页效率终结版(推荐)
    本篇文章是对PHP分页的实现进行了详细的分析介绍,需要的朋友参考下

    这里仅展示出设计思路,具体安全问题,是否同步更新等可根据具体需求添加修改:
    以前人们常用的PHP分页技 术,通常都需要先统计出数据库中总信息条数才能判断出总页数并对其进行分页,,也就是说,每次分页要对数据库进行两次调用,在面临大数据量,高并发查询情 况下是很不效率的,曾经一直为这个问题烦恼但都没想到合适的解决方法,今天突然在睡梦中 遇见奇迹...具体分析原理如下:(红色部分为优化后的区别,思路采用最原始的代码书写,为了照顾新人)
    原始分页技术:包括许多开源程序也在使用的技术;
    一般都是对数据库信息进行统计,然后调用分页类,进行分页,,每次都要经过2次数据库查询操作
    例(原始分页技术): 每次都要进行2次数据库查询

    复制代码 代码如下:

    $sqlstr="select count(*) as total from tablename";
    $sql=mysql_query($sql) or die("error");
    $info=mysql_fetch_array($sql); //第一次 数据库调用
    $total=$info["total"];//每次翻页都要进行 总信息条数 的数据库查询操作
    $pagesize=10; //每页显示数量
    $page=$_GET["page"]?max(intval($_GET["page"]),1):1;//当前页
    if($total){,
    $sql="select * from tablename limit "($page-1)*$pagesize",$pagesize";
    $sql=mysql_query($sql) or die("error");//第二次数据库查询操作
    $info=mysql_fetch_array($sql);
    do{
    ...............
    }while($info=mysql_fetch_array($sql));
    include("page_class.php");//调用分页类
    $url="url.php?page=" //假设当前页为 URL.PHP
    echo $get_page=new get_page($url,$total,$pagesize,$page); //URL 为要分页的URL地址
    }
    //优化后的分页技术(只需在第一次调用时进行信息统计即可)
    if(isset($_GET["total"])){ //只需要进行一次总信息条数的统计即可
    $total=intval($_GET["total"]);
    //以后的的总信息数量通过GET传递即可,节省了1/2的数据库负荷,,,,
    }else{
    $sqlstr="select count(*) as total from tablename";
    $sql=mysql_query($sql) or die("error");
    $info=mysql_fetch_array($sql); //第一次 数据库调用
    $total=$info["total"];
    }//总信息条数
    $pagesize=10; //每页显示数量
    $page=$_GET["page"]?max(intval($_GET["page"]),1):1;//当前页
    if($total){
    $sql="select * from tablename limit "($page-1)*$pagesize",$pagesize";
    $sql=mysql_query($sql) or die("error");//第二次数据库查询操作
    $info=mysql_fetch_array($sql);
    do{
    ...............
    }while($info=mysql_fetch_array($sql));
    include("page_class.php");//调用分页类
    $url="url.php?total=$total&page=" //假设当前页为 URL.PHP
    echo $get_page=new get_page($url,$total,$pagesize,$page); //URL 为要分页的URL地址
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题