【问题标题】:Where do I sort?我在哪里排序?
【发布时间】:2011-05-24 21:30:36
【问题描述】:

我有一个要查询的数据库,但我不确定在哪里对结果进行排序,到目前为止,我有以下选项。

  • 在 MySQL 查询中。
  • 在列表级别(使用 LinkedList)
  • 在显示结果之前使用比较器对未排序的列表进行排序(基本上在 jsp 中)

List 是由 ObjectDTO 组成的,那么它在哪里更有效。有什么想法吗?

【问题讨论】:

  • 请注意,您通常希望避免在 JSP 文件中使用 Java 代码。因此,最后一点可以更好地“基本上在 servlet 中”。

标签: java sql mysql sorting


【解决方案1】:

数据库。使用索引和有关数据的其他信息,db 非常擅长此操作。

【讨论】:

    【解决方案2】:

    如果可能,您应该在数据库中进行排序。

    • 数据库可以使用索引。如果有合适的索引可用,则可以按排序顺序从磁盘中读取结果,从而提高性能 - 不需要额外的 O(n log(n)) 排序步骤。
    • 如果您只需要第一个 x 结果,您还可以最大限度地减少数据传输(既减少了网络传输,也减少了磁盘访问,如果有合适的索引)。

    【讨论】:

    • 那么我应该使用 LinkedList 来保持插入顺序吗?
    • @Triztian:ArrayList 更适合快速检索。 LinkedList 只是删除速度更快(如果唯一目的是显示结果,则不需要)。
    • 嗯,不知道,我已经阅读了关于列表和集合的接口和摘要,但有时它令人困惑
    • 所以,简而言之,这就是我想要做的。查询数据库,如下所示: SELECT* FROM order WHERE user = 'triztian' ORDER BY 'mycolumn' ASC; 然后,我会将结果集字段映射到 DTO 对象,然后将 DTO 对象插入到列表中,最后我想显示该列表保留插入元素的顺序。跨度>
    • @Mark Byers,关于第 2 点:不仅是数据传输——如果有可以使用的索引,那么它会直接削减 I/O 操作——你可能会多次削减查询执行时间 = 巨大的胜利(加上它最大限度地减少了传输)。
    【解决方案3】:

    最好是在 mySQL 查询中。

    a) 很容易做到

    b) 如果您使用索引,则在创建索引或自动插入新行时进行排序(有时索引需要重组,但这是数据库管理员的日常事务。这适用于表非常大的情况。 )。

    e) 如果索引包含 where 子句中使用的列,则访问通常更快

    d) 你不需要每次都阅读整个表格来自己进行排序

    e) 即使你没有索引,我相信数据库也能做最好的排序

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      • 2014-07-12
      • 2021-07-19
      • 1970-01-01
      • 2016-09-23
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多