为什么 oracle entity framework 这么慢? 700 毫秒 vs 原始 SQL 的 30 毫秒

Why oracle entity framework is so slow? 700ms s vs 30 ms with raw SQL

db.Database.SqlQuery<int>(
    "select sum(QUANTITY)   from SomeTable 
    where USER_ID = :userid and Timestamp >= :someDate1and  
    and Timestamp < :someDate2", 
    userId, someDate1, someDate2
)
.First();

这需要 20 毫秒

var cnt = db.SomeTable.Where(x => 
    x.User.Id == user.Id
    && x.Timestamp >= someDate1
    && x.Timestamp < someDate2
)
.Sum(x => x.Quantity);

这需要 800 毫秒来执行

我在 var start = DateTime.UtcNow; 前后的代码中设置了标记,然后记录 (DateTime.UtcNow - start).TotalMilliseconds

如果我检查生成的 SQL 并直接在服务器上执行它需要 2ms。那么 EF 将剩余的 798 毫秒用于什么目的?要取一个号码?

这里是生成的SQL

SELECT "GroupBy1"."A1" AS "C1"
FROM
  (SELECT SUM("Extent1"."QUANTITY") AS "A1"
  FROM "FB"."SomeTable" "Extent1"
  WHERE ((("Extent1"."USER_ID" = :p__linq__0)
  OR (("Extent1"."USER_ID"    IS NULL)
  AND (:p__linq__0            IS NULL)))
  AND ("Extent1"."TIMESTAMP"  >= :p__linq__1)
  AND ("Extent1"."TIMESTAMP"   < :p__linq__2))
  ) "GroupBy1";

好的,正如 GSerg 指出的那样,杀手是 OR (("Extent1"."USER_ID" IS NULL) 来自 User_Id 是 Oracle 中的可空字段,它本身来自 User 属性 缺失 [Required]属性。我想这部分是我的错,但 EF 是一个滑坡