我有一個帶有 JpaRepository 的 Spring Boot 應用程式。我現在正在嘗試獲取我的 db 中某個欄位的所有唯一值。
假設我有一個Foo帶有 Integer PKid和非唯一 Integer field的物件bar。我想獲取所有唯一值,bar我想知道以下哪個查詢最有效:
DISTINCT在陳述句中使用SELECT并將結果存盤在串列中。
@Query("select distinct f.bar from Foo f")
List<Integer> getUniqueBar();
DISTINCT在Set 中使用SELECT并將結果存盤在 Set 中。
@Query("select distinct f.bar from Foo f")
Set<Integer> getUniqueBar();
- 不要
DISTINCT在選擇中使用并將結果存盤在 Set 中。
@Query("select f.bar from Foo f")
Set<Integer> getUniqueBar();
所有 3 個查詢都產生相同的結果。哪個效率最高?
IMO,它應該是 1,因為它在 db 中進行重復過濾,但我不確定在 Set 上使用 List 是否會帶來很多收益。
(我對將結果存盤到的實際容器不感興趣,只要它是Collection.)
uj5u.com熱心網友回復:
選項 1 或 2 最適合性能,選項 3 將回傳表中的所有柱,甚至是重復值。我猜你沒有從資料庫中看到重復值的原因是因為你將結果映射到一個不能包含重復項的集合。如果我們談論選項 1 與選項 2 相比的性能,我會說這真的取決于您將使用這些集合的目的。例如看這個問題:Performance and Memory allocation comparison between List and Set。
我將使用選項 2 使過濾發生在資料庫中,并在代碼中明確說明此集合中不應有重復項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/456531.html
上一篇:在影像中查找框并保存為影像cv2
