分页查询,查个 total 很难吗?

2018-04-02 10:42:22 +08:00
 wxsm

如题。一个破接口,后端开发人员三番五次说要不传 total,让我去别的地方取,说什么查个 total 相当全表扫,我真是服气。

14231 次点击
所在节点    程序员
95 条回复
weizhen199
2018-04-02 15:53:48 +08:00
有个办法,去统计信息里拿总行数,大致是精准的
toono
2018-04-02 16:06:03 +08:00
内心 OS: 他到底在说 MySQL 还是 MongoDB.....
tulongtou
2018-04-02 16:08:15 +08:00
@kera0a 问题是你不知道 where 后面有什么条件呢,所以没办法说 count(*) 快慢
tairan2006
2018-04-02 16:12:38 +08:00
真太大了就用 es/solr 查…
RTNelo
2018-04-02 16:17:59 +08:00
还好在我司没遇到过大表显示页号的需求,给前端传个 `is_end` 就行了
Immortal
2018-04-02 16:19:15 +08:00
@weizhen199
这个的确可以,innodb 的查询优化器里应该有个大概数据用来做优化推算
chenqh
2018-04-02 16:27:17 +08:00
@weizhen199 不会拿。。
barbery
2018-04-02 16:37:58 +08:00
很烦这种分页,最完美的分页就是游标(逃
cysroad
2018-04-02 16:38:00 +08:00
如果一个表几百万的数据,一页 20 条,你显示个总页数有意思吗?分页带 total,一般只做 50 页以内的
kimmykuang
2018-04-02 16:38:08 +08:00
这个不是量大了都会遇到的问题么,简单就是做异构索引上 es,mysql innodb 千万各种条件 count,给个完美的方案?
icegreen
2018-04-02 16:51:48 +08:00
应该传 / 后端不行
icegreen
2018-04-02 16:55:53 +08:00
这种肯定是从用户 /产品设计的角度去出发, 第一要考虑的肯定是用户的体验和满足产品的需求;

另外接口设计肯定是要为使用者服务和考虑的, 至少我们是这样要求的.
JKeita
2018-04-02 17:05:41 +08:00
不管你建不建索引,只要命中的数据量很大时,查 total 本来就很慢
finull
2018-04-02 17:07:58 +08:00
@debuggerx 这种不需要 total,某页如果是满页就认为有下一页就好
RubyJack
2018-04-02 17:09:54 +08:00
你看看淘宝网给不给你翻到最后一页?
count 就是性能杀手,能不做就不做,后端没毛病。
wengjin456123
2018-04-02 17:11:57 +08:00
楼主没毛病啊,total 当然要给啊
nxtxiaolong
2018-04-02 17:12:11 +08:00
这个看数据库本身表中有没有存这个字段了,比如 mongodb 就每隔 collection 有这样的字段,没啥大问题,如果涉及到全表扫面,建立索引也是很慢的~
JKeita
2018-04-02 17:12:12 +08:00
数据量大就用 ES,才比较好解决
JKeita
2018-04-02 17:15:03 +08:00
还有即使是 ES 也会限制页数,页数越大查询越慢。所以数据量很大时,传 total 根本就毫无意义
maemual
2018-04-02 17:21:54 +08:00
如上面所说,我们不知道你们的业务场景到底是什么,上面动不动随便让人用 ES 的也都是随便瞎说。只能说的是,在某些场景下,取 count 可能确实是一个很麻烦的事情。所以希望能够对后端更加宽容,去了解为什么之后,好好的沟通。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/443491

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX