批量分拣

时间:2012-10-30 15:01:18

标签: database sorting servlets

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

1 个答案:

答案 0 :(得分:1)

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

首先加载第一页,一旦页面底部出现,您就通过AJAX请求下一页的查询。直到这里,我猜你没事。

如果用户滚动了10页深度然后他进行排序,你将不得不一次性加载10页数据。这是错误的。

两件事,

  1. 更改排序条件时,您更改了正在查看表格的上下文。
  2. 假设您加载10页并将用户保留在第10页。他会对发生的事感到惊讶。
  3. 因此,只要用户更改了排序条件,您就可以按新条件清理DIV并加载第1页。你看到你现在没有负担。你呢?


    一些快速提示:

    1. 我个人认为最好让DBMS进行排序和分页。我认为这样做是为了做到这一点。您应该编写优化查询。

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

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

    4. 利用DBMS提供的特殊功能来优化查询。 Here is an article for MySQL