NHibernate查询性能与大量的析取和连接

时间:2015-05-27 16:16:57

标签: c# sql hibernate nhibernate

我尝试使用析取和连接将过滤器应用于来自NHibernate会话的数据。我已经实现了如下:

var disjunction = new Disjunction();
foreach (var entry in filterCriteria.SelectedCriteria)
{
     var conjunction = Restrictions.Conjunction();
     conjunction.Add(Restrictions.Eq("SourceAccount", entry.SourceAccount));
     conjunction.Add(Restrictions.Eq("SourceItemId", entry.SourceItemId));
     conjunction.Add(Restrictions.Eq("SourceProgram", entry.SourceProgram));
     disjunction.Add(conjunction);
}
criteria.Add(disjunction);

问题是SelectedCriteria集合中有大量组合,导致SQL查询具有WHERE的 lot (SourceAccount = x1,SourceItemId = x2,SourceProgram = x3) OR(SourceAccount = y1,SourceAccount = y2,SourceAccount = y3)或......等等。这意味着查询的性能很糟糕。

我的问题是如何更好地将大量的析取和连接应用于NHibernate查询?

1 个答案:

答案 0 :(得分:0)

正如评论中所指出的,这更像是一个SQL查询问题而不是NHibernate问题。我通过改进完整查询的逻辑来解决它,以最小化产生的析取和连接的数量。