NHibernate的查询性能有大量的析取和连词

本文关键字:查询 性能 NHibernate | 更新日期: 2023-09-27 17:50:57

我正在尝试使用析取和连词对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查询具有lot WHERE (SourceAccount = x1, SourceItemId = x2, SourceProgram = x3)或(SourceAccount = y1, SourceAccount = y2, SourceAccount = y3)或…等等。这意味着查询的性能很糟糕。

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

NHibernate的查询性能有大量的析取和连词

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