如果我在db2中创建一个视图,请说:
select
RNN(sometable) as rn,
c1,c2,c3
from sometable
order by rn desc
fetch first 100 rows only
这基本上会从表中拉出最后100行(我使用RNN,因为没有别的东西可以根据那种排序了,遗憾的是。不是我的设计)。我对此的疑问是:
我创建此视图的原因是因为我们必须从包含超过30米条目的表中提取一些信息,并且无法真正对该信息进行排序或索引(同样,不是我的设计,而是软件创建者) )。
任何帮助表示赞赏!感谢
编辑:澄清我实际上不能自己去测试,或者我会。对于一个我不知道创建我们自己的观点的影响(因此最后一个问题的子弹),两个我主要收集研究呈现给我的老板。
编辑:实际上你知道什么,我不会在这里问第二个问题,因为这是一个不同的问题。这不是关于如何找到一个独特的领域或任何一个,这是这个问题的旁注。这是关于建立一个视图,它有什么影响,以及它是否会做我想要的。
答案 0 :(得分:3)
在DB2 for i的视图中,外部全查询的定义中不支持ORDER BY和FETCH FIRST子句。
但是,您可以在当前支持的DB2 for i版本(6.1,7.1,7.2)中使用公用表表达式。
以下是在7.1上测试的:
create view myview
as ( with tbl as (select RNN(sometable) as rn,
c1,c2,c3
from sometable
order by rn desc
fetch first 100 rows only
)
select * from tbl
)
在回答其余问题时,是的,视图是动态的。每当你从中读取时,你将在那个时间点获得最后100行。
但请注意,即使没有按结果排序,使用RRN功能也意味着每次读取这100行时都会进行全表扫描。所以表现可能很糟糕。
我发现很难相信没有什么可以创建索引并用于订购。但是,如果确实如此,请考虑添加一列以满足您的需求。将列添加到DB2 for i中的表相对容易,而不需要可怕的LVLCHK(* NO)或重新编译现有的RPG应用程序。