我正在使用Entity Framework(代码优先),并且在我的LINQ查询中查找指定子句的顺序会对性能产生巨大影响,例如:
using (var db = new MyDbContext())
{
var mySize = "medium";
var myColour = "vermilion";
var list1 = db.Widgets.Where(x => x.Colour == myColour && x.Size == mySize).ToList();
var list2 = db.Widgets.Where(x => x.Size == mySize && x.Colour == myColour).ToList();
}
Run Code Online (Sandbox Code Playgroud)
如果(罕见)颜色子句在(通用)大小子句之前,它的速度很快,但反过来它的速度要慢一些.该表有几百万行,所讨论的两个字段是nvarchar(50),因此没有标准化,但它们都是索引的.这些字段以代码第一种方式指定,如下所示:
[StringLength(50)]
public string Colour { get; set; }
[StringLength(50)]
public string Size { get; set; }
Run Code Online (Sandbox Code Playgroud)
我真的应该在我的LINQ查询中担心这些事情,我认为那是数据库的工作吗?
系统规格如下:
对,任何惩罚的贪婪,效果可以如下复制.这个问题似乎对许多因素非常敏感,所以请关注其中某些因素的人为性质:
通过nuget安装EntityFramework 6.0.0-beta1,然后生成代码第一个样式:
public class Widget …Run Code Online (Sandbox Code Playgroud)