2013-10-01 395 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應用程序中使用內存。