1

我有一个 Java servlet,它查询数据库并在浏览器中显示表。我已经实现了分页,这样当用户滚动表格时才会发出新的请求。问题是如果用户选择基于某个列对 UI 中的表进行排序,请求需要很长时间,因为 DB 中的实际表很大,它对整个表进行排序,然后将排序后的分页数据发送到客户端/浏览器. 所以假设如果表有 100k 行并且我有 100 行的页面大小,那么有没有办法调整 DB 中的排序或 servlet 中的分页,不需要对整个 100k 行进行排序。

4

1 回答 1

1

分页可能会有所帮助。所以,这就是它通常的做法。与旧的分页加载网页不同,当您有单页滚动时。您通常有一个下拉列表,其中列出了排序列。

您首先加载第一页,当页面底部出现时,您通过 AJAX 请求下一页的查询。到这里为止,我想你很好。

似乎让您感到困扰的是,如果用户滚动了 10 页,然后他进行了排序,您将不得不一次性加载 10 页数据。这是错误的。

两件事情,

  1. 当您更改排序标准时,您更改了查看表格的上下文。
  2. 假设,如果您加载 10 个页面并将用户保持在第 10 个页面。他会对发生的事情感到惊讶。

因此,一旦用户更改了排序标准,您就可以按照新标准清理 DIV 并加载第 1 页。你看你现在没有负担。你?


几个快速提示:

  1. 我个人认为最好让 DBMS 来做排序和分页。我认为它是这样做的。您应该编写优化的查询。

  2. 要排序的索引列会有所帮助。

  3. 如果项目不经常更改,您可能希望使用适当的 TTL 缓存页面(来自 DB 的结果)。

  4. 利用 DBMS 提供的特殊功能来优化查询。这是一篇关于 MySQL 的文章

于 2012-10-30T15:17:25.450 回答