![](/img/trans.png)
[英]Linq-to-sql query with translation from comma-separated of code to comma-separated of description
[英]EF SQL query Performance on comma-separated string Ids
要存儲和查詢關聯的 ID,哪種方法在查詢速度和性能方面效果最好? 尤其是在主表的大量記錄中,比如10萬條記錄。
1- 使用逗號分隔的字符串字段作為 ID:
query.Where(x => (',' + x.Ids + ',').Contains(',' + value + ','));
2-使用單獨的表和連接操作:
query.Where(x => x.SecondaryTable.Any(s => s.Id == value));
第一個選項對動態生成的字符串執行字符串比較,因此索引不可能提高查詢性能。 它會異常緩慢。
第二個選項是對索引主鍵執行數字比較(假設 Id 是某種數字類型並且它是主鍵)。 對於您的處理器來說,這是一個更快的比較來評估,而且它是一個簡單的比較,無需為所述比較生成動態數據。
如果您將 ID 存儲為逗號分隔的字符串 - 您總是有 TABLE/INDEX 掃描。 如果你的桌子很小,那就足夠了。
使用存儲與主表關聯的 Id 的SecondaryTable
表,還有許多其他計划:
query = query.Where(x => x.SecondaryTable.Any(s => s.Id == value));
var query =
from m in query
from s in m.SecondaryTable.Where(s => s.Id == value)
select s;
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;
無論如何,最好測試和檢查執行計划。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.