一.前言 通常,我们分页时怎么实现呢? 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条数据
大数据量,比如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
此优化的前提可以称之为最近流行的头条人物“许三多”,总数据多,查询条件多,返回列多 优化前分页查询内部select列为需要的全部列,优化后内部select只返回ID主键,外部查询关联原数据表,然后查出所需要的列 例子1 优化前: select t.* from ( select r.* ,row_number() over(order by r.id desc) row from tab(nolock) r where 1=1 and r.IsDelete=0 and r.Status>0 an