nhibernate返回结果大小导致性能差异的原因是什么?
同样的查询在分页大数据(例如,所有行数1000000行)时得到的结果很快,但小数据(例如,所有行数5行)得到的结果很慢nhibernate返回结果大小导致性能差异的原因是什么?,nhibernate,pagination,performance,Nhibernate,Pagination,Performance,同样的查询在分页大数据(例如,所有行数1000000行)时得到的结果很快,但小数据(例如,所有行数5行)得到的结果很慢 但我使用sql profiler跟踪查询,并复制查询,在msms中执行它,它获取数据的速度非常快,使用50ms,但使用nhibernate列出数据,当小数据花费10s甚至timeount时,我尝试了一些在站点中发布的方法,清除缓存和使用无状态会话都没有得到word。任何人都知道如何改进它。非常感谢。首先,您对SQL注入持开放态度,在构建SQL语句时,您不应该真正使用字符串连接。
但我使用sql profiler跟踪查询,并复制查询,在msms中执行它,它获取数据的速度非常快,使用50ms,但使用nhibernate列出数据,当小数据花费10s甚至timeount时,我尝试了一些在站点中发布的方法,清除缓存和使用无状态会话都没有得到word。任何人都知道如何改进它。非常感谢。首先,您对SQL注入持开放态度,在构建SQL语句时,您不应该真正使用字符串连接。这会回来咬你的未来。请抽出时间阅读本文,并改用参数化查询 现在让我们来回答你的问题,想一想:-
请注意,造成问题的不是NHibernate,而是SQL Server和您正在运行的查询。我建议您先看看这个问题。当您获取所有行时,您使用的代码是什么?是的,我发现问题在于使用sql profiler,当数据计数不同时,执行计划也不同。
int pageSize = 36;
int pageIndex=1;
IMultiQuery multiQuery = _session.CreateMultiQuery();
multiQuery
.Add(session.CreateQuery("select * from Smart_Products where " + where + " order by " + orderBy)
.SetFirstResult((pageIndex - 1) * pageSize)
.SetMaxResults(pageSize))
.Add(session.CreateQuery("select count(*) c from Smart_Products where " + where))
.SetInt32("BrandId", brandId)
.SetInt32("Flag", flag)
.SetInt32("Status", 1);
if (categoryId > 0)
{
multiQuery.SetInt32("CategoryId", categoryId);
}
IList results = multiQuery.List();
foreach (var o in (IList)results[0])
products.Add((ProductInfo)o);
long count = (long)((IList)results[1])[0];