Java 将结果集写入具有排序输出的文件
我想将结果集中的“随机”输出(大约1.5 mil行)以排序方式放入文件中。我知道我可以在查询中使用sort-by命令,但该命令“昂贵”。 你能告诉我有没有什么算法可以在一个文件中写入结果集行,以便最终对内容进行排序,这样我能提高性能吗?Java 将结果集写入具有排序输出的文件,java,file,sorting,resultset,Java,File,Sorting,Resultset,我想将结果集中的“随机”输出(大约1.5 mil行)以排序方式放入文件中。我知道我可以在查询中使用sort-by命令,但该命令“昂贵”。 你能告诉我有没有什么算法可以在一个文件中写入结果集行,以便最终对内容进行排序,这样我能提高性能吗? 我使用的是java 1.6,并且query有多个联接。为表中的排序条件定义一个索引,然后您可以毫无问题地使用order by子句,并按照来自结果集的方式编写文件 如果查询有多个联接,请为联接和排序条件创建适当的索引。您可以在程序中对数据进行排序,但这样做是在浪费
我使用的是java 1.6,并且query有多个联接。为表中的排序条件定义一个索引,然后您可以毫无问题地使用order by子句,并按照来自结果集的方式编写文件 如果查询有多个联接,请为联接和排序条件创建适当的索引。您可以在程序中对数据进行排序,但这样做是在浪费时间。当学习如何正确调整/使用数据库而不是重新发明数据库引擎中已有的排序算法时,这段时间将更有价值
抓起数据库的探查器,检查查询的执行计划。根据我的经验,在数据库端排序通常同样快或更快……当然,如果您排序的列已被索引,那么如果您正在从数据库中读取,则如果您有适当的索引,获得排序的输出应该不会如此“昂贵” 但是,有时对于复杂的查询,SQL Optimizer很难应用索引。在这种情况下,DB只是将结果累积到一个临时表中,然后透明地为您排序 这是非常不可能的,你可以匹配水平的优化投入到你的DB引擎;但是,如果您的问题是因为您正在对数据进行一些后处理,而这些后处理否定了DB所做的任何排序,那么除了自己对其进行排序之外,您别无选择 同样,最简单的方法是使用DB:只需使用适当的索引写入一个临时表并从中转储即可 如果您确定数据总是适合RAM,您可以在内存中对其进行排序。这是唯一一种可以打败DB引擎的情况,因为你知道你不需要高清访问
但这有很多“如果”。如果需要对数据进行排序,必须有人进行排序-您或数据库。将orderby添加到查询中当然更容易。但是你没有理由不能在你这边的记忆中排序。最简单的方法是使用比较器将数据分块到已排序的集合(TreeSet,TreeMap)中,以对所需的列进行排序。然后写出排序后的数据 请强调“可能”,因为如果数据放在RAM中,数据库也知道(或可以被告知)这一点,而你又回到了原点。没有理由你不能,但在性能方面你真的不应该这样做,除非你有一个非常特殊的情况(数据放在内存中,非常奇怪的数据库模式导致无法修复的查询计划)。