什么时候sql明显快于java编程'distinct'

时间:2009-06-04 10:37:28

标签: java sql database performance oracle

如果我有一个使用'distinct'的sql查询(在oracle中),它会比检索非distinct更快,然后通过java编程获得唯一结果吗?

我听说某处oracle sql的重要性很重,但它是否比通过java编程手动“区分”更重?

谢谢, 弗朗兹

9 个答案:

答案 0 :(得分:25)

经验法则是数据库中的数据处理速度比编程语言快。

原因是数据已经在数据库中可用,并且它节省了转到您的应用程序的工作量:

  • 从数据库中编组驱动程序的数据;
  • 网络转移;
  • 从驱动程序向应用程序解组数据;

至于Oracle DISTINCT很重,它可能意味着永远只是在查询中抛出一个DISTINCT只是因为它似乎是一个好主意 - 简要介绍它具有真实的数据集,因为它可能会产生严重的性能影响。

答案 1 :(得分:11)

两个主要方面:

  • 如果必须将数据传输到Java,那么执行该传输的所有开销都是如此。在数据库中完成工作意味着您无需传输不需要的数据。
  • 数据库将能够使用其索引,缓存等来加快速度。

我很惊讶地发现获取所有数据然后在Java中执行不同的操作比在数据库中执行更快。

答案 2 :(得分:6)

如果您的应用程序可以比数据库更快地执行此操作,则数据库会严重损坏(除非应用程序在速度相当快的计算机上运行)。当然,数据库必须做一些工作(排序或使用哈希表来消除重复),但你的应用程序也是如此!

在应用程序中执行数据库可以做得很好的任务几乎总是错误的。

答案 3 :(得分:3)

在我的日子里,当动物还在他们的atari上说话和玩游戏时,创建不需要的网络流量是一件坏事。

获得的数据超出了您的需求,但根本没有完成。我可以看到获取所有数据并在Java中操作它以获得不同值的唯一原因是,稍后您还需要其他数据。所以为了实现它。

注意:这与在服务器上执行所有操作并不相同,在更多支持数据操作的环境中对数据进行操作可能是一件好事。只是不要求提供超出您需要的数据(缓存作为一个值得注意的例外)

答案 4 :(得分:3)

一般规则:让数据库做数据库的工作,你在节省内存,网络,CPU。这些资源中的大部分都将用于数据库方面,但在投入生产之前已经进行了大量优化,所以 - 给宝宝送给她的母亲......

答案 5 :(得分:2)

Oracle 9和Oracle 10执行不同的操作,Oracle 9排序,Oracle 10哈希。在少数特定情况下,Java可能比Oracle 9更快地完成,但比Oracle 10更慢。

我认为整个Oracle可以更快地做到这一点。请参阅Jon Skeet的回答。

答案 6 :(得分:1)

在内存中数据操作通常更快,但是。如果你知道你有很多重复,那么最好在数据库上区分。否则,您将使用更多的网络带宽和内存。所以它实际上取决于数据。

答案 7 :(得分:1)

Oracle,特别是在更高版本中,有几种方法可供选择以实现DISTINCT操作,包括排序或散列,以及以各种方式访问​​表(例如,使用索引或完整扫描)。它还提供了有关数据的更多信息,包括统计信息和约束,这有助于它找到java程序可能不一定了解的优化。

除了这里的主要问题之外,这是管道传输的数据量(正如其他人多次说过的那样)。

答案 8 :(得分:0)

SQL distinct“重”,因为它必须消除多次出现。这可以通过首先对数据进行排序然后消除具有相同元素的运行来实现。沉重的事实是这样做的成本很高。

这里的惯用解决方案是让数据库完成提升,然后担心性能成为问题。