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

DB2上的分页表

  •  0
  • grenade  · 技术社区  · 16 年前

    我们有一个视图,在没有约束的情况下,它将返回9000万行,一个报表应用程序需要显示该视图的分页数据集。

    我们正在使用nhibernate,最近注意到它的分页机制如下所示:

    select * from (select rownumber() over() as rownum, 
        this_.COL1 as COL1_20_0_, 
        this_.COL2 as COL2_20_0_ 
        FROM SomeSchema.SomeView this_ 
        WHERE this_.COL1  = 'SomeValue') as tempresult 
    where rownum between 10 and 20
    

    这个查询使db服务器崩溃。我认为发生的事情是,嵌套查询在选择子集(第10-20行)之前,为where子句满足的每一行分配一个行号。由于嵌套查询将返回大量行,因此该机制的效率不是很高。我在其他SQL平台上看到了很多有效地实现这一点的技巧和窍门,但我正在努力寻找DB2解决方案。事实上 an article on IBM's own site

    有更好的办法吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Cornel Creanga    16 年前

    不幸的是,据我所知,这是唯一的办法。不过,我认为首先需要确定在查询组件上花费的时间—使用visualexplain或snapshot/event监视工具。