我正在使用休眠 api 的query.setMaxResults(maxResults)
&query.setFirstResult(firstResult)
方法来实现分页。MS SQLServer 2012 sp1
是我用于该项目的数据库。
以下是示例查询:
SELECT a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1
query.setMaxResults(maxResults)
&方法是如何query.setFirstResult(firstResult)
工作的?它会从数据库中获取所有数据,然后result-set
根据 first 和 max 参数对其进行过滤吗?还是仅根据索引中的max-result
值获取结果数first-result
?
用户觉得应用程序需要一些时间来使用数据更新 UI。那么推荐的分页方式是什么?我是否需要使用存储过程或其他方式来提高性能?好心劝告。
更新: 当用户选择第 1 页时,执行以下查询:
SELECT top 200 a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1 - executed with 2502540 ms
当用户选择第 30 页时,将执行以下查询:
SELECT top 6000 a.c1, b.c2, b.c3 FROM Person as a WITH(NOLOCK), Address as b WITH(NOLOCK) where <condition> ORDER BY a.c1 - executed with 34220186 ms
所以很明显,时间与页码成正比。无论页码如何,有没有办法保持恒定的执行速度?因为我们总是获取相同数量的记录。
提前致谢。