建议先查询出主键的位置 例如select id from table order by id limit 100000,1;根据主键的位置确认需要的数据select * from table where id > (select id from table order by id limit 100000,1) limit pageSize

解决方案 »

  1.   

    分页本身就是mysql效率比较慢的问题,特别是在大数据量的情况下的后面页数在设计的时候就应该考虑到主键的设置如果你是现在的情况,对于总数可以用应用程序去维护总数
      

  2.   

    是使用SSH框架开发的项目,设置在后台输出SQL语句后发现它执行了2次相同的语句,第一次是读取所有,然后直接拿个size()第二次再limit而在某些查询,这两条占的时间差不多一样的。后来试了下count计算总数,但是当有条件时,count一样很慢。没办法了,只有暂时先直接查出所有,然后再找list中获取数据,但总觉得这样做不好。另外弱弱再问多版主一个问题:EXPLAIN  主键的key_len竟然是152 正常么
      

  3.   

    如果实时性要求不高的话,可以将数据量比较大的表的总大小预存起来(t_tables_count)。
    在分页查询时,可以先到t_tables_count中查询出页数(省去查询总数目的时间)。
    之后查询具体页面时,用limit限制即可。
      

  4.   

    - -! key_len那个是因为id类型是varchar(50),用了uuid 略惨
      

  5.   

    发现如果转换下思维,使用异步(例如网页的AJAX)的方式:先执行读出数据的SQL,客户端显示数据后,再执行和计算count的SQL查询,算是个不错的解决方案,但如果能一步到位就更好了。