Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

写文档说明对于分页问题的优化 #130

Closed
lalahei opened this issue Aug 3, 2016 · 6 comments
Closed

写文档说明对于分页问题的优化 #130

lalahei opened this issue Aug 3, 2016 · 6 comments

Comments

@lalahei
Copy link

lalahei commented Aug 3, 2016

分页的查询请求,如果落在了多个库多个表,得到了多个结果集,如果获取最后一页,sjdbc的处理方式是时查询全量的结果集,然后移动游标到最后一页,这样很容易照成内存溢出或大量网络请求的消耗(取决于你设置的fetchsize的大小)。

@terrymanu
Copy link
Member

这有什么更好的解决方案么

@jiang2015
Copy link
Contributor

这个问题有好的解决方案或者思路了吗

@hanahmily
Copy link
Contributor

这个方案是有的

  1. 如果使用limit, 前提是要假设各个分片数据是均匀的。这样就可以合理推断每个分片可以跳过固定的数据,这样可以大大减少提取的数据量。
  2. 不用limit,分页的时候使用特定字段(比如使用创建时间)排序,然后分页点使用该字段。这样每一页提取的数据就差不多了。

@hanahmily
Copy link
Contributor

可以将这个问题写成文档分享出来

@hanahmily hanahmily changed the title 分页的性能问题 写文档说明对于分页问题的优化 Nov 27, 2016
@liyichengcheng
Copy link

不用limit,分页的时候使用特定字段(比如使用创建时间)排序,然后分页点使用该字段。这样每一页提取的数据就差不多了。用创建时间排序也不能保证各分表的数据均匀啊,可能某一段很长时间插入的数据都在一个分表。

@liyichengcheng
Copy link

如果是查询倒数页的话,其实不用 “查询全量的结果集,然后移动游标到最后一页”,把 order by asc 改成 desc, 或者 把 desc 改 asc 取前几页就可以了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants