实体框架5和Oracle:在查询非唯一索引字段时,带有关闭影响性能的
我对Entity Framework 5和Oracle DB存在性能问题. 我有一个简单的SQL选择:SELECT * FROM NOTE WHERE NOTENUMBER =’1A23456′ NOTENUMBER包含在名为NOTE的表的索引中,但该字段不是主键/唯一. >当我使用Oracle SQL Developer执行语句时,返回结果 我怀疑有两件事: > EF和Oracle.DataAccess-provider存在一些问题,没有使用可用的非唯一索引.如果我有Entity Framework 5的调试符号会有所帮助,但我无法在任何地方找到它们. 如果我这样调用我的存储库: 选择“Extent1”.“NOTE_KEY”AS“NOTE_KEY”, 查询需要大约5500毫秒. 另一方面,如果我像这样调用我的存储库: 选择“Extent1”.“NOTE_KEY”AS“NOTE_KEY”, 查询需要大约30ms. 所以唯一的区别是WHERE子句中条件的顺序,以及后者似乎没有EF替换参数的事实. 我使用VS2010和.NET4,并参考EF5(v4.4.0.0). public IQueryable<NOTE> All(Expression<Func<NOTE,bool>> predicate = null) { var setOfNotes = GetDbSet<NOTE>(); var notesQuery = from note in setOfNotes select note; if (predicate != null) { notesQuery = notesQuery.Where(predicate); } return notesQuery; } 我尝试创建CompiledQuery,我尝试使用setOfNotes.AsNoTracking(),我尝试使用.NET 4.5 – 性能没有差异. 我能够快速获得这个特定查询的一种方法是使用Oracle的基本.NET数据提供程序(ODB.NET)并手动构建查询,但我宁愿不坚持使用该解决方案.同样,如果我在where子句中使用主要字段,即使使用EF和相同的All-method,查询也很快. 所以问题似乎在EF的某个地方.如果我只有EntityFramework.dll的符号,我觉得可以找到更多. EF调用谓词的方式会有问题吗?如何在EF中替换’@p_linq_0’参数? 解决方法我遇到了类似的问题.在我的情况下没有使用索引的原因是我从.NET传递一个字符串(unicode)作为参数.将其与非unicode数据库字段进行比较.解决方案是在将字符串参数传递给非unicode之前将其传递给where子句: using System.Data.Objects; EntityFunctions.AsNonUnicode( myUnicodeParam) (编辑:上饶站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |