我们认为,在没有约束的情况下,将返回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
查询使数据库服务器瘫痪。我认为发生的事情是嵌套查询在选择子集(行10-20)之前为where子句满足的每一行分配一个行号。由于嵌套查询将返回大量行,因此该机制效率不高。我已经看到很多在其他SQL平台上有效地做这个的技巧和窍门,但我很难找到一个DB2解决方案。实际上an article on IBM's own site推荐了nhibernate采用的方法。
有更好的方法吗?
答案 0 :(得分:1)
不幸的是,据我所知,这是唯一的方法。但是我认为首先需要确定在查询组件上花费的时间 - 使用visual explain或快照/事件监视工具。