复杂的partition by性能差 返回

SqlSugar 老数据
1 2480

原本我是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)