本帖最后由 dingliu 于 2018-10-23 11:04 编辑
1、客户端(应用程序或浏览器)分页将数据从应用服务器全部下载到本地应用程序或浏览器,在应用程序或浏览器内部通过本地代码进行分页处理 优点:编码简单,减少客户端与应用服务器网络交互次数 缺点:首次交互时间长,占用客户端内存 适应场景:客户端与应用服务器网络延时较大,但要求后续操作流畅,如手机GPRS,超远程访问(跨
2、应用服务器分页 将数据从数据库服务器全部下载到应用服务器,在应用服务器内部再进行数据筛选。 优点:编码简单,只需要一次SQL交互,总数据与分页数据差不多时性能较好。 缺点:总数据量较多时性能较差。 适应场景:数据库系统不支持分页处理,数据量较小并且可控。
3、数据库SQL分页采用数据库SQL分页需要两次SQL完成 一个SQL计算总数量 一个SQL返回分页后的数据 优点:性能好 缺点:编码复杂,各种数据库语法不同,需要两次SQL交互。
以下为两种分页策略: 直接通过rownum分页: select * from ( select a.*,rownum rn from (select * from product a where company_id=? order by status) a where rownum<=20) where rn>10; 数据访问开销=索引IO+索引全部记录结果对应的表数据IO
采用rowid分页语法 优化原理是通过纯索引找出分页记录的ROWID,再通过ROWID回表返回数据,要求内层查询和排序字段全在索引里。 create index myindex on product(company_id,status); select b.* from ( select * from ( select a.*,rownum rn from (select rowid rid,status from product a where company_id=? order by status) a where rownum<=20) where rn>10) a, product b where a.rid=b.rowid; 数据访问开销=索引IO+索引分页结果对应的表数据IO
扫码关注黑马视频库公众号,免费获取黑马全学科视频教程
|