我在MS SQL Server中使用实体框架核心,我对我的dbContext有以下查询:
var list = await dbContext.MyTable
.OrderByDescending(x => x.Timestamp)
.Where(x => x.Something == someVar && x.Succeeded)
.ToListAsync()
.ConfigureAwait(false);
如果我将OrderByDescending()
从Where()
之前移动到之后,性能会有什么不同吗?
像这样:
var list = await dbContext.MyTable
.Where(x => x.Something == someVar && x.Succeeded)
.OrderByDescending(x => x.Timestamp)
.ToListAsync()
.ConfigureAwait(false);
根据建议,我已经做了一些基准测试。我每次运行都使用一个新的InMemoryDatabase,并用100万个条目填充它,每个条目都有不同的时间戳。我运行了5次这两个查询,以获得更好的基线进行比较。
OrderBy()
置于Where()
:之前时的结果
1651ms
1096ms
1172ms
1214ms
1391ms
OrderBy()
置于Where()
:之后的结果
735ms
1026ms
894ms
1110ms
939ms
看起来语句的顺序确实有影响,尽管它很小。