nhibernate返回结果大小导致性能差异的原因是什么?

nhibernate返回结果大小导致性能差异的原因是什么?,nhibernate,pagination,performance,Nhibernate,Pagination,Performance,同样的查询在分页大数据(例如,所有行数1000000行)时得到的结果很快,但小数据(例如,所有行数5行)得到的结果很慢 但我使用sql profiler跟踪查询,并复制查询,在msms中执行它,它获取数据的速度非常快,使用50ms,但使用nhibernate列出数据,当小数据花费10s甚至timeount时,我尝试了一些在站点中发布的方法,清除缓存和使用无状态会话都没有得到word。任何人都知道如何改进它。非常感谢。首先,您对SQL注入持开放态度,在构建SQL语句时,您不应该真正使用字符串连接。

同样的查询在分页大数据(例如,所有行数1000000行)时得到的结果很快,但小数据(例如,所有行数5行)得到的结果很慢


但我使用sql profiler跟踪查询,并复制查询,在msms中执行它,它获取数据的速度非常快,使用50ms,但使用nhibernate列出数据,当小数据花费10s甚至timeount时,我尝试了一些在站点中发布的方法,清除缓存和使用无状态会话都没有得到word。任何人都知道如何改进它。非常感谢。

首先,您对SQL注入持开放态度,在构建SQL语句时,您不应该真正使用字符串连接。这会回来咬你的未来。请抽出时间阅读本文,并改用参数化查询

现在让我们来回答你的问题,想一想:-

  • 每个测试的where条款是否相同
  • 索引是问题的原因吗
  • 您是否查看了SSMS中的查询计划以了解发生了什么
  • 当您第二次运行同一个SQL两次时,它会缓存在SQL Server上,这就是为什么您第二次看到更快的时间

  • 请注意,造成问题的不是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];