实体框架空值会影响查询性能

时间:2015-07-29 14:48:08

标签: c# oracle performance entity-framework null

我有一个性能问题,值的实体框架绑定如何影响性能?

我在LINQPad上进行了一些测试,这段代码运行得非常快,如果直接在数据库上运行,就会生成快速查询......

var dataFim = new DateTime(2015,12,12);
var dataInicio = new DateTime(2015,01,01);
long? empresaClienteId = 1081;

 var query = Transacoes
                    .Select(t => new { t.Data, t.Estorno, t.EmpresaClienteId, t.KmFinal, t.KmInicial, t.ValorBruto})
                .Where(t => t.Data.Value >= dataInicio
                            && t.Data.Value < dataFim
                            && t.Estorno == "N"
                            && t.EmpresaClienteId == empresaClienteId
                            && (t.KmFinal - t.KmInicial) < 500)
                .GroupBy(t => new { t.Data.Value.Month, t.Data.Value.Year })
                .OrderBy(t => new { t.Key.Month, t.Key.Year })
                .Select(t => new
                {
                    Mes = t.Key.Month,
                    Ano = t.Key.Year,
                    ValorTotal = t.Sum(r => r.ValorBruto ?? 0),
                    KmPercorridoTotal = t.Sum(r => (r.KmFinal ?? 0) - (r.KmInicial ?? 0))
                });


query.AsNoTracking().Dump();

...但是,如果我将此变量更改为var

 var empresaClienteId = 1081;

或长

long empresaClienteId = 1081;

然后突然查询需要永远(但如果在数据库上运行direclty则不行)

模型和请求参数都是不可为空的long,存储列映射也是如此。

任何想法为什么会发生这种情况以及如何处理这个问题?有多长?变量是不可取的,因为这是一个不可为空的参数

PS:我正在使用Oracle数据库并开发

0 个答案:

没有答案