代码之家  ›  专栏  ›  技术社区  ›  anger

使用JDBC滚动策略分页表格数据是否会导致有害的性能?

  •  0
  • anger  · 技术社区  · 14 年前

    我们目前有一个系统,在屏幕上显示一页表格数据,用户界面上没有任何分页支持。它运行在java1.5/springjdbc/T-SQL存储过程/sqlserver2000堆栈上。

    无法跳过结果集中的行(不使用动态SQL的SQLServer2K的限制);我正在探索让数据层选择所有行,让DAO层滚动跳过的行页面,然后只读取一页的行。

    我的问题是:

    我知道数据库和应用程序之间只有一页的数据,但我想知道DBMS内部会发生什么。假设查询计划已经被缓存,如果我只需要第41页,DBMS会跳过前40页结果的处理吗?

    2 回复  |  直到 14 年前
        1
  •  1
  •   Remus Rusanu    14 年前

    如果您有一个BTree(索引,聚集的或非聚集的),那么进入第X页的唯一方法就是知道该页上的一个键并直接查找它。 另一种“跳过”第一个X-1页的方法是从1到X遍历所有页,并分别跳过每个记录。“paged”字段上的窄索引有助于计数,因为高密度插槽(因此窄索引)减少了必须扫描的页数,以查找开始页X的行。

        2
  •  1
  •   James Black    14 年前

    因此,从当前设置开始,进行5个测试,跳过0、2、4、6、8页,看看跳过8页和2页之间是否有区别。

    再写一个测试,看看会发生什么。

    然后,让一个存储过程选择所有内容,但只返回感兴趣的行,并对此进行另一个测试。 为了你的

    对于上一个存储过程将达到的性能,很难给出任何真实的想法,因为有许多我们没有的因素,但总体上,我希望存储过程完成的工作越多,速度就越快。

    我倾向于通过单元测试来了解什么是最好的选择,因为你可以在负载下比较它,看看CPU和内存发生了什么变化。您可以测量任何重要的内容,以确定哪个选项最适合您的设计。