Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将结果集写入具有排序输出的文件_Java_File_Sorting_Resultset - Fatal编程技术网

Java 将结果集写入具有排序输出的文件

Java 将结果集写入具有排序输出的文件,java,file,sorting,resultset,Java,File,Sorting,Resultset,我想将结果集中的“随机”输出(大约1.5 mil行)以排序方式放入文件中。我知道我可以在查询中使用sort-by命令,但该命令“昂贵”。 你能告诉我有没有什么算法可以在一个文件中写入结果集行,以便最终对内容进行排序,这样我能提高性能吗? 我使用的是java 1.6,并且query有多个联接。为表中的排序条件定义一个索引,然后您可以毫无问题地使用order by子句,并按照来自结果集的方式编写文件 如果查询有多个联接,请为联接和排序条件创建适当的索引。您可以在程序中对数据进行排序,但这样做是在浪费

我想将结果集中的“随机”输出(大约1.5 mil行)以排序方式放入文件中。我知道我可以在查询中使用sort-by命令,但该命令“昂贵”。 你能告诉我有没有什么算法可以在一个文件中写入结果集行,以便最终对内容进行排序,这样我能提高性能吗?
我使用的是java 1.6,并且query有多个联接。

为表中的排序条件定义一个索引,然后您可以毫无问题地使用order by子句,并按照来自结果集的方式编写文件

如果查询有多个联接,请为联接和排序条件创建适当的索引。您可以在程序中对数据进行排序,但这样做是在浪费时间。当学习如何正确调整/使用数据库而不是重新发明数据库引擎中已有的排序算法时,这段时间将更有价值


抓起数据库的探查器,检查查询的执行计划。

根据我的经验,在数据库端排序通常同样快或更快……当然,如果您排序的列已被索引,那么如果您正在从数据库中读取,则如果您有适当的索引,获得排序的输出应该不会如此“昂贵”

但是,有时对于复杂的查询,SQL Optimizer很难应用索引。在这种情况下,DB只是将结果累积到一个临时表中,然后透明地为您排序

这是非常不可能的,你可以匹配水平的优化投入到你的DB引擎;但是,如果您的问题是因为您正在对数据进行一些后处理,而这些后处理否定了DB所做的任何排序,那么除了自己对其进行排序之外,您别无选择

同样,最简单的方法是使用DB:只需使用适当的索引写入一个临时表并从中转储即可

如果您确定数据总是适合RAM,您可以在内存中对其进行排序。这是唯一一种可以打败DB引擎的情况,因为你知道你不需要高清访问


但这有很多“如果”。如果需要对数据进行排序,必须有人进行排序-您或数据库。将orderby添加到查询中当然更容易。但是你没有理由不能在你这边的记忆中排序。最简单的方法是使用比较器将数据分块到已排序的集合(TreeSet,TreeMap)中,以对所需的列进行排序。然后写出排序后的数据

请强调“可能”,因为如果数据放在RAM中,数据库也知道(或可以被告知)这一点,而你又回到了原点。没有理由你不能,但在性能方面你真的不应该这样做,除非你有一个非常特殊的情况(数据放在内存中,非常奇怪的数据库模式导致无法修复的查询计划)。