目前我正在使用NHibernate TransformToRowCount函数来获取查询的行数。当公司表行数达到1000万行甚至更多时,这种方法太慢而且资源密集。需要注意的是,我使用分页,因此在大多数情况下实际返回的行数为10,但总计数将为1000万或更多。
我想要做的是使用Postgresql wiki http://wiki.postgresql.org/wiki/Count_estimate中的count_estimate函数而不是TransformToRowCount。
我的问题是如何以类似的方式使用NHibernate调用count_estimates,我可以使用TransformToRowCount。
当前代码(有效,但很慢)。
var query = session.QueryOver<Company>();
FilterOnCompanyName('test', query);
query.Skip((pageNumber - 1) * numberOfItems).Take(numberOfItems).Future<Company>();
ICriteria rowCountCriteria = CriteriaTransformer.TransformToRowCount(query.UnderlyingCriteria);
int totalCount = rowCountCriteria.FutureValue<int>().Value;
IList<Company> companies = query.List<Company>();
上面的代码生成以下sql查询
select * from company where name = 'test' limit 10;
select (*) from company where name = 'test';
我希望它能生成类似这样的东西
select * from company where name = 'test' limit 10;
select count_estimate('select * from company where name=''test''');
提前致谢