2016-10-19 34 views

回答

4

下面的代碼,它使用take(1)是有效的,因爲take(1)轉化爲底層關係型數據庫生病,然後查詢優化SQL的功能優化挑只有結果的第一行。

db.run(events (..filter/sort..) .take(1).result.head) 

但在僅.head在應用層光滑情況下不會翻譯該代碼到SQL所以其不會傳遞到該基礎關係數據庫。沒有優化就完成了。當在應用程序級完成.head時,將從關聯db返回的符合條件的行中選擇一行。在應用層排第一行顯然效率不高。

.take(1)將轉換爲SQL查詢中的LIMIT 1

.head確實在查詢應用層的結果之後給出結果集的第一個元素(結果集可能非常大,而且效率非常低,速度很慢)。

.take(1)將僅在數據庫級別提供一行。這是非常非常有效的。

0

您應該使用headOption,因爲使用不是一個好習慣。如果結果爲空,它可能會吹你的代碼。

db.run(events (..filter/sort..) .take(1).result.headOption) 
相關問題