单个查询慢于3个查询

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倍.有谁能解释一下?

Ral*_*ton 1

首先,如果没有标题索引,我发现很难相信您得到了您声称的行为。

至少将统计信息设置为打开并将结果添加到该问题中。

但话虽如此,第一种方法实际上是对数据库的三次访问,但会利用创建的索引。

第二种方法是单次访问数据库,但肯定会导致全表扫描,2,500,000 行可能会花费相当长的时间。