一.前言 通常,我们分页时怎么实现呢? 1 SELECT * FROM table ORDER BY id LIMIT 1000, 10; 但是,数据量猛增以后呢? 1 SELECT * FROM table ORDER BY id LIMIT 1000000, 10; 如上第二条查询时很慢的,直接拖死. 最关键的原因mysql查询机制的问题: 不是先跳过,后查询: 而是先查询,后跳过.(解释如下) 什么意思?比如limit 100000,10,在找到需要的那10条时,先会轮询经过前10W条数据
最好的办法是利用sql语句进行分页,这样每次查询出的结果集中就只包含某页的数据内容. sql语句分页,不同的数据库下的分页方案各不一样,下面是主流的三种数据库的分页sql: oracle: select * from (select *,rownum as tempid from student ) t where t.tempid between " + pageSize*(pageNumber-1) + " and " + pageSize*pageNumber mys
大数据量,比如10万以上的数据,数据库在5G以上,单表5G以上等.大数据分页时需要考虑的问题更多. 比如信息表,单表数据100W以上. 分页如果在1秒以上,在页面上的体验将是很糟糕的. 优化思路: 1.主键索引,如ID自增列,主键 2.借助sqlserver的ROW_NUMBER()实现分页,分页时只需得到ID即可,如: WITH NoPagedTable AS ( SELECT ROW_NUMBER() OVER (order by ctime desc) AS rowIndex, ID FR