使用EF和Oracle选择Count very slow
我正在使用EF5和Oracle数据库 我正在用一个特定的参数对一个表进行选择计数。当我使用EF时,查询会像预期的那样返回值31,但返回结果大约需要10秒使用EF和Oracle选择Count very slow,oracle,entity-framework,Oracle,Entity Framework,我正在使用EF5和Oracle数据库 我正在用一个特定的参数对一个表进行选择计数。当我使用EF时,查询会像预期的那样返回值31,但返回结果大约需要10秒 using (var serv = new Aperam.SIP.PXP.Negocio.Modelos.SIP_PA()) { var teste = (from ens in serv.PA_ENSAIOS_UM where ens.COD_IDENT_UNMET == "FBLDY3840"
using (var serv = new Aperam.SIP.PXP.Negocio.Modelos.SIP_PA())
{
var teste = (from ens in serv.PA_ENSAIOS_UM
where ens.COD_IDENT_UNMET == "FBLDY3840"
select ens).Count();
}
如果我执行下面的简单查询,结果是相同的(31),但结果显示为500毫秒
SELECT
count(*)
FROM
PA_ENSAIOS_UM
WHERE
COD_IDENT_UNMET 'FBLDY3840'
当我使用EF时,有没有办法提高性能
注意:此表中有13.000.000行。以下是一些您可以尝试的内容:
DbContext
(我们称之为“\u context”),然后将Database.Log
属性设置为日志记录方法。如果这个方法实际上没有做任何事情,那也没关系——您可以在其中设置一个断点,然后看看发生了什么
例如,定义一个日志函数(我有一个名为“logging”的静态类,它使用nLog写入文件)
然后,当您创建上下文时,指向LogQuery:
_context.Database.Log = Logging.LogQuery;
我想知道您的版本是否从数据库中提取数据,然后进行计数。如果是这样的话,其他语法可能会将所有工作留在它所属的服务器上完成。不确定,尤其是因为我从未在Oracle中使用过EF,我不知道它的行为是否与SQL相同。EF生成的SQL查询是否相同?我只有在使用ToList()而不是Count()时才能获得查询。在本例中,查询是相同的,但在EF中,返回时间超过10秒。
_context.Database.Log = Logging.LogQuery;
var teste = serv.PA_ENSAIOS_UM.Count(ens=>ens.COD_IDENT_UNMET == "FBLDY3840");