select * from news 
这个到是挺快的。就算在后面加where条件也很快,一般是几十毫秒到,百毫秒就完事了。可是用
select * from news limit 1230000 ,30 
就是十几秒了。
前面翻页挺快的,越到后面越慢。
这有办法解决吗?我看过phpwind的百万楼翻页,那速度是相当的快啊。不知他用的是什么技术。

解决方案 »

  1.   

    没办法,除非你把先用 where id>1230000 来限制一下,否则,MYSQL需要从 1 到 1230000 都先过一遍,速度自然就慢了。
      

  2.   

    select * from news where id>123000 limit 1230000 ,30 id 主键
      

  3.   

    考虑利用主键ID来进行处理
    例如:
    where ID>n and ID<n+31
      

  4.   

    这个ID到是个好办法,不过
    比如id=100id>100 and id<130
    但100~130中间我删除了120-125的ID记录,那么我只能得到25条记录,这怎么办?
      

  5.   

    select * from news where id>100  limit 30 
      

  6.   

    晕死,万一,我删了60-80的条记录,那么前id>100 不就只有80条记录了嘛
      

  7.   


    没办法, limit 400,20, 是一定要先取过前 400 个然后才取 20 个返回的。所以等于处理 420 条记录如果你的记录很多。一种算法就是通过二分法定位哪里是这 第 400 条记录。一种常用的基于ID算法是。 假设没有删除,则 N 应该 是在ID=N的这条记录上,  select count(*) from table1 where id <=N; 得到数字M, 如果M =n 则可以用 select * from talbe where id>m order by id limit 10;如果 M < N ,(假设条件下 M 不会大于N的。因为只有删除的时候会对ID有影响)
    则  N = 2N-M,然后再取 M=count(*) where id < n 直到 M=n
      

  8.   

    http://blog.csdn.net/yueliangdao0608/archive/2008/10/22/3124371.aspx