我在我的 C# .NET 应用程序中针对使用 MySQL .NET 连接器 6.6.5 的 MySQL 数据库运行 Entity Framework 5。
通常,当 EF 不够快时,我会求助于存储过程或直接执行 SQLcontext.Database.SqlQuery
但是,我最近遇到了一个问题,即 SQL 调用实际上比它的 EF 等价物花费的时间要长得多,我想知道是否有人知道这是为什么?
这是(慢速)SQL 查询:
public sbyte? getFirstRouteTypeFromStop(string primaryCode) {
string sql = string.Format("SELECT r.route_type FROM stoptimes st INNER JOIN trips t ON st.trip_id = t.trip_id INNER JOIN routes r ON t.route_id = r.route_id WHERE st.stop_id = '{0}' LIMIT 1;", primaryCode);
return context.Database.SqlQuery<sbyte?>(sql).FirstOrDefault();
}
这是(快速)EF代码:
public sbyte? getFirstRouteTypeFromStop(string primaryCode) {
return context.stoptimes.Where(st => st.stop_id.Equals(primaryCode)).FirstOrDefault().trip.route.route_type;
}
这个方法在循环中被重复调用,EF 快了很多。(至少 1000%)为什么?
重要笔记:
- MySQL 数据库对所有这些列进行了适当的索引。
- 当原生 SQL 查询直接在 MySQL 中运行时,它的执行速度似乎比在 C# 应用程序中运行时快得多——我怀疑这是一个非常重要的观察结果。