2013-10-01 392 views
0

我有一个包含组和许可列的表。我想从组列表中找到最大权限。我使用java和oracle数据库,我想到了两种方法可以做到这一点:sql查询性能:查找最大值

方法1:

in java loop through the group list 
    result = select permission from table where group = currentgroup 
    if result > max, max = result 

方式2:

max = select max(permission) from table where group in (group list) 

我想办法2会更快,但然后组列表可以很长,我不知道是否是一个好主意,在一个单一的SQL查询长列表。

+0

我不明白,为什么列表长度会影响'MAX()'的结果,除非你的查询有缺陷? –

+0

从哪里得到这个组列表?我会假设它来自你的数据库。在组表上使用内连接。然后你可以在数据库上完成所有工作,而不必在查询中提供整个组列表。 –

+0

在oracle中,查询中绑定变量的最大数量是有限制的。也许常量也有一个限制。无论如何,我认为绑定变量的限制至少为1000.如果存在任何限制,应该更高。 –

回答

1

根据您提供的信息,第二种方法是迄今为止最好的。数据库直接针对这些类型的任务进行优化,因此,在数据库中始终最好将数据缩小。第一种方法意味着数据库无论如何都需要返回所有值,从而增加处理时间,带宽并在Java应用程序中使用内存。