复杂的partition by性能差 返回
原本我是db.Queryable<ThinLog>().Where(o => o.CreateTime > fdate && o.Weight != 0).PartitionBy(o => new { o.OpenId }).OrderBy(o => o.Id, OrderByType.Desc).Select(o => new { o.OpenId, o.Weight }).Take(1).ToList();
这样常规写法的,然后我发现执行两次这个语句后接口的查询时间经常超过10秒,,,,。然后我ToSql()拿出sql语句,然后执行
const string sql =
"SELECT * FROM (SELECT [OpenId] AS [OpenId],[Weight] AS [Weight] ,ROW_NUMBER() OVER(PARTITION BY [OpenId] ORDER BY [Id]{0}) AS RowIndex FROM [ThinLog] WHERE (( [CreateTime]>'{1}') AND ( [Weight]>0 ))) T WHERE RowIndex=1";
db.Ado.SqlQuery<ThinLog>(string.Format(sql, " DESC", fdate)).ToList();
这样查询后接口耗时下降到了二百多毫秒,说明这个partition by的lamdba解析时间过长。
热忱回答(1)
-
fate stay night VIP0
2019/5/20更新 匿名对象引起的慢新版本解决了
0 回复