解決資料庫N 1查詢問題

2021-09-28 16:57:07 字數 972 閱讀 7377

資料表如下:

department表

|id|name|

user表

|id|name|department_id|

需求是得到以下結構的資料:

[

}]

查詢使用者列表

迴圈使用者列表查詢對應的部門資訊

$users = $db->query('select * from `user`');foreach($users as &$user)
該方法查詢次數為:1+n(1次查詢列表,n次查詢部門),效能最低,不可取。

通過連表查詢使用者和部門資料

處理返回資料

$users = $db->query('select * from `user` inner join `department` on `department`.`id` = `user`.`department_id`');// 手動處理返回結果為需求結構
該方法其實也有侷限性,如果 user 和 department 不在同乙個伺服器是不可以連表的。

該方法先查詢1次使用者列表

取出列表中的部門id組成陣列

查詢步驟2中的部門

合併最終資料

**大致如下:

$users = $db->query('select * from `user`');

$departmentids =[ ];foreach($users as $user)

}$departments = $db->query('select * from `department` where id in ('.join(',',$department_id).')');

$map = ; // [部門id => 部門item]foreach($departments as $department) foreach($users as $user)

該方法對兩個表沒有限制,在目前微服務盛行的情況下是比較好的一種做法

解決資料庫N 1查詢問題

需求 資料表如下 department表 id name user表 id name department id 需求是得到以下結構的資料 方法一 迴圈查詢 查詢使用者列表 迴圈使用者列表查詢對應的部門資訊 users db query select from user foreach usersa...

如何解決查詢N 1問題

1.使用資料庫left join來實現,在一次資料庫查詢中查出多條資料,但是要對結果進行分組組裝。但是對於分頁支援不好,需要自定義分頁外掛程式,現有解決思路如下 編寫sql時,將主表的條件寫入到where條件中,將所有left join的條件寫到on中,使用and來拼接多個條件,然後編寫分頁外掛程式...

JPA 解決n 1次查詢問題

分兩步操作 1 主表實體類中,新增註解 namedentitygraph 如上,設定name值,並指定attributenodes 看名字就知道可以指定多個 每個node的值如下圖紅框 2 在主表的dao方法中 重寫用到的查詢方法,service層中呼叫什麼方法就重寫什麼方法,我這邊用到的是 pag...