要存盤和查詢關聯的 ID,哪種方法在查詢速度和性能方面效果最好?尤其是在主表的大量記錄中,比如10萬條記錄。
1- 使用逗號分隔的字串欄位作為 Ids :
query.Where(x => (',' x.Ids ',').Contains(',' value ','));
2-使用單獨的表和連接操作:
query.Where(x => x.SecondaryTable.Any(s => s.Id == value));
uj5u.com熱心網友回復:
如果您將 ID 存盤為逗號分隔的字串 - 您總是有 TABLE/INDEX 掃描。如果你的桌子很小,那就足夠了。
對于SecondaryTable存盤與主表關聯的 Id 的表,還有許多其他計劃:
- 您可以保持原樣并信任或不信任資料庫引擎優化器
query = query.Where(x => x.SecondaryTable.Any(s => s.Id == value));
- 如果對 (MainId, Id) 是唯一的。以下查詢肯定會命中索引
var query =
from m in query
from s in m.SecondaryTable.Where(s => s.Id == value)
select s;
- 如果對 (MainId, Id) 不是唯一的。
var secondary = db.SecondaryTable.Where(s => s.Id == value);
var mainIds = secondary.Select(s => new { s.MainId }).Distinct();
query =
from m in query
from s in mainIds.Where(s => s.MainId == m.Id)
select m;
無論如何,最好測驗和檢查執行計劃。
uj5u.com熱心網友回復:
第一個選項對動態生成的字串執行字串比較,因此索引不可能提高查詢性能。它會例外緩慢。
第二個選項是對索引主鍵執行數字比較(假設 Id 是某種數字型別并且它是主鍵)。對于您的處理器來說,這是一個更快的比較來評估,而且它是一個簡單的比較,無需為所述比較生成動態資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/418691.html
標籤:
上一篇:從資料庫中過濾資料的正確方法
下一篇:如何從兩片平板電腦計算AVG
