解决思路提供两个:
1、第一次读取数据库时,将程序所有的数据读出然后放入javascript数组里面,传入客户端,在客户端进行处理,这样不必每次都读数据库。
2、一次性将所以符合条件的数据全部读书,按照limit的条数将所有数据生成静态页面,所以所有的"下一页”、“未页”这些都是指向静态的页面,不需每次读数据。新浪的翻页大部分都是采用这种方法!

解决方案 »

  1.   

    谢谢梦豪。你所说的第一方法是用类似下面的语句赋值吗?请告知。
    <script language = "javascript">
    <?php
    echo "var aa = new Array();\n";
    for ($i = 0;$i<=10;$i++){
    echo "aa[$i]=$i;\n";
    }
    echo "alert(aa[10]);\n";
    ?>
    </script>
    上面的语句虽然能正确执行,但觉得这么别扭。
    还有你说的第二种方法我更是不会,如果一次生成所有静态页面,页面又存放在哪?请给我一个简单的例子吧。
      

  2.   

    dddddy(糊涂神) 建议你进行多方面的权衡,
    梦豪的两种方法在针对少量数据有它的优势,但对于大数据量也是不可取的!
    1, 你觉得把上万条记录信息放入jscript array中处理,合理吗?
    2, 对上万条记录进行一次性读取,按每N条生成一个html页面,而且这个操作在每次数据更新时均进行,合理吗?以上两种不必一万条,超过一千条记录就够呛了~!
    btw, to limenghao2(梦豪) 你见过新浪的信息分页,是采用静态页面链接?? 所以,我个人认为,处理大数据量,难免完全脱离数据库,你可以考虑程序方面的优化!
      

  3.   

    这个问题我还是没有找到解决的办法,请问 tncboy(网之绿) 有什么更好的办法吗?根据你的理解新浪搜狐等大型网站是采用什么方法查询数据库的呢?
    请回复,谢谢。
      

  4.   

    链接数据库应该不费什么时间,至于查询记录总数,可以把数据传过去,这样就只要执行一次就可以了
    有个问题想问一下,ORACLE中的MINUS中执行过程会不会也遍历了整个数据库
      

  5.   

    以mysql为例.
    我一般都是先取出数据总数然后算出当前页面的limit值.
    其实只要在where中把索引做好,就算数据总数有几万条,从索引搜索下来还是很快的.以下是我的一个分页列表程序的片断.
    if(!isset($page))
        $page=1;
    $page=(int)$page;
    if(!isset($pagesize) or $pagesize=="")
        $pagesize=DEFAULT_PAGESIZE;
    $pagesize=(int)$pagesize;  //初始化$page,$pagesize$sql="select count(*) from tab where conditions";
    $this->db->query($sql);
    $reccount=(int)$this->db->result(0);  // 取出总记录数量$pagecount = floor($reccount/$pagesize);
    if($reccount%$pagesize!=0)
        $pagecount++;
    if($page>$pagecount)
        $page=$pagecount;
    elseif($page<1)
        $page=1;    // 判断$page的正确性以及算出总页数$sql="select columes from tables where conditions order by columes limit $recstart,$pagesize"; //用limit $recstart,$pagesize取出某页的$pagesize条记录.在一个6000条记录的数据表中用select count(*)的耗时为0.1秒(因为制造数据库的人肯定会考虑到优化这样的语句,肯定不会遍历全部数据来获得这个数),第二次用0秒就可以得出(有缓存).而直接执行select * from table limit 3000,20使用时间为0.08秒(数据库通过索引读取这20条记录也不会遍历全部记录,所以效率也是很高的).第二次重复执行耗时为0.01秒.所以其实分页程序根本就不需要一次读取所有数据,通过js传递,那样做效率更低.