優化 FollowerController.cs 的子查詢性能
問題: Line 345 將家族成員 ID 載入內存(ToList) - 如果家族有 100+ 成員,載入 100-400 bytes 優化: 移除 ToList(),改為使用 IQueryable 子查詢 - var ccList = cc.ToList(); // 移除 - 直接使用 cc 進行 Contains 查詢 - 生成 SQL: WHERE num IN (SELECT...) OR leader IN (SELECT...) 效果: ✓ 減少內存占用:100-400 bytes → 0 ✓ 完全在數據庫執行 ✓ SQL 優化器可以更好地優化查詢計劃 對比: - 原始版本(載入內存):2 次查詢 - 優化版本(子查詢):1 次查詢(最佳)
This commit is contained in:
12
review_report.txt
Normal file
12
review_report.txt
Normal file
@@ -0,0 +1,12 @@
|
||||
═══════════════════════════════════════════════════════════════
|
||||
🔍 AsEnumerable/AsQueryable/ToList 完整 REVIEW
|
||||
═══════════════════════════════════════════════════════════════
|
||||
|
||||
檢查範圍:Batch 1-3 所有已修改文件
|
||||
檢查標準:
|
||||
✅ 最佳選擇 - 性能和可讀性都最優
|
||||
⚠️ 可優化 - 可以進一步優化
|
||||
❌ 需修正 - 存在明顯問題
|
||||
|
||||
═══════════════════════════════════════════════════════════════
|
||||
|
||||
@@ -340,10 +340,9 @@ public class FollowerController : ApiController
|
||||
|
||||
//int ccc = cc.Count();
|
||||
|
||||
|
||||
|
||||
var ccList = cc.ToList();
|
||||
var qry = _db.followers.Where(f => ccList.Contains(f.num) || (f.leader.HasValue && ccList.Contains(f.leader.Value)));
|
||||
// 優化:使用子查詢在數據庫層面執行,避免載入所有家族成員 ID
|
||||
// 生成 SQL: WHERE num IN (SELECT...) OR leader IN (SELECT...)
|
||||
var qry = _db.followers.Where(f => cc.Contains(f.num) || (f.leader.HasValue && cc.Contains(f.leader.Value)));
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user