我想以排序的方式将结果集(大约1.5 mil行)中的“随机”输出放入文件中。我知道我可以在查询中使用sort by命令,但该命令“很贵”。 你能告诉我是否有任何算法在文件中写入结果集行,所以内容最终会被排序,我可以获得性能吗? 我正在使用java 1.6,并且查询有多个连接。
答案 0 :(得分:4)
为表中的排序条件定义索引,然后您可以毫无问题地使用order by子句,并将文件写入结果集中。
如果您的查询有多个连接,请为连接和排序条件创建正确的索引。您可以对程序中的数据进行排序,但是您会浪费时间。在学习如何正确调整/使用数据库而不是重新发明已存在于数据库引擎中的排序算法时,这段时间将更有价值。
抓住数据库的分析器并检查查询的执行计划。
答案 1 :(得分:1)
根据我的经验,在数据库端排序通常是快速或更快...当然,如果你排序的列被编入索引
答案 2 :(得分:0)
如果您正在从数据库中读取数据,那么如果您有适当的索引,那么获取排序的输出不应该那么“昂贵”。
但是,有时对于复杂的查询,SQL优化器很难应用索引。在这种情况下,数据库只是将结果累积到临时表中并透明地为您排序。
您不太可能匹配放入数据库引擎的优化级别;但如果您的问题出现是因为您正在对数据进行一些后处理,否定数据库所做的任何排序,那么除了自己进行排序之外别无选择。
同样,最简单的方法是使用DB:只需使用适当的索引写入临时表并从那里转储。
如果您确定数据始终适合RAM,则可以在内存中对其进行排序。这是你可能能够击败数据库引擎的唯一情况,因为你知道你不需要高清访问。
但那是'ifs'。更好地留在您的数据库
答案 3 :(得分:0)
如果您需要对数据进行排序,则必须有人 - 您或数据库。将ORDER BY添加到查询中肯定更容易。但是没有理由你不能在内存中对它进行排序。最简单的方法是使用Comparator对排序集合(TreeSet,TreeMap)中的数据进行分块,以对您需要的列进行排序。然后写出已排序的数据。