ITPub博客

首页 > 数据库 > 数据库开发技术 > 应该怎么分页?

应该怎么分页?

原创 数据库开发技术 作者:xuexiaogang 时间:2022-08-10 13:12:36 0 删除 编辑

我忘记我是不是写过了,如果写过就跳过吧。为什么写这个,以前出过几次问题,我发现分页写的有问题。很多人不是太明白。我这里列举一下:

   A场景: select * from t where rownum<10 或者 limit 10  或者用fetch first 10 rows only;

这种场景:不管表中数据量是TB级别还是PB级别,查询KB返回KB。

   B场景: select count(*) from t 

这种场景:不管数据量是TB级别还是PB级别,查询TB或者PB,返回KB。

    然后说明一下A场景 Select count(*)from t;基本内存查询可能涉及少量磁盘查询,返回byte或者KB。他的 效率不等于 B场景  select * from t; 基本是磁盘查询,返回MB甚至GB。这是成千上万倍的差异。

  C场景 Select count(*)from t;    效率不等于 select count(1) from (select * from t;) 等于2个B场景(一个应用SQL一个框架SQL)

  D场景 Select count(*)from t;    效率更加不等于 select count(1) from (select * from t   复杂查询加排序;) 等于2个B场景(一个应用SQL一个框架SQL)

 而我们在日常工作中C和D是日常最大的问题也是最常见的。都是甩锅给框架,框架说没人逼着你用啊?

    那遇到CD两种场景怎么做?

1、SQL写的好点,确保SQL在毫秒级别完成;(单机上亿也做得到,做不到的先优化设计和SQL)

2、SQL不好改的话,就简单分页不要总页数。就直接limit的一次次去往下找。

在PC互联网时代是输入框为入库比如百度,谷歌。他们没有总页数,但是就是可以往下找。

在移动互联网时代,就是手指滑动了,也没有总页数。比如微博、朋友圈,也是没有总页数,往下滑。

只有数据量较小的场景(比如邮箱)才需要总页数。那么可以结合自己情况选择要不要总页数。强烈推荐不要总页数,就一页一页往下走,这才符合互联网场景,除非你不是面向互联网应用的。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/637517/viewspace-2909805/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 大实话
请登录后发表评论 登录
全部评论
OracleACE/PostgreSQLACE/阿里云MVP/腾讯云TVP/墨天轮 MVP/TiDBMVA/数盟会华东区长老/OpenTenBase社区委和技术委委员/架构师技术同盟名人堂成员上海地区理事会成员/if社区联合发起人/《DBA实战手记》作者/公众号:四海内皆兄弟

注册时间:2013-07-01

  • 博文量
    422
  • 访问量
    953518