Mos*_*tov 7 .net c# linq-to-sql
我正在使用.NET framework 4.5.1 Linq to SQL.
我首先使用代码生成此产品类:
public class Part
{
public int PartID { get; set; }
[Required(ErrorMessage = "xxx")]
public string Title { get; set; }
[MaxLength(50)]
[Index(IsClustered = false, IsUnique = false,Order =1)]
public string Part_Number { get; set; }
[MaxLength(50)]
[Index(IsClustered = false, IsUnique = false, Order = 2)]
public string Manufacturer_Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在数据库中有大约250万个这样的实体.
第一种方法
var query = db.Parts.Where(s => s.Manufacturer_Number == sstring).ToList();
query.AddRange(db.Parts.Where(s => s.Part_Number == sstring).ToList());
query.AddRange(db.Parts.Where(s => s.Title == sstring).ToList());
Run Code Online (Sandbox Code Playgroud)
第二种方法
var query = db.Parts.Where(s => s.Manufacturer_Number == sstring
|| s.Part_Number == sstring || s.Title == sstring).ToList();
Run Code Online (Sandbox Code Playgroud)
第一种方法比第二种方法快100倍.有谁能解释一下?
首先,如果没有标题索引,我发现很难相信您得到了您声称的行为。
至少将统计信息设置为打开并将结果添加到该问题中。
但话虽如此,第一种方法实际上是对数据库的三次访问,但会利用创建的索引。
第二种方法是单次访问数据库,但肯定会导致全表扫描,2,500,000 行可能会花费相当长的时间。