如果我在db2中创建一个视图,请说:
select
RNN(sometable) as rn,
c1,c2,c3
from sometable
order by rn desc
fetch first 100 rows only
这本质上可以从桌子上拉出最后100行(我使用RNN,因为可悲的是,没有其他方法可以基于我的设计。我对此的问题是:
- 此视图是否会自动更新,因为有时会更新
- 更具体地说,要删除非匹配行。例如,可以说是将最后100行从具有1000的文件中拉出。有些人添加了一行,最低的RN的行是否被删除并添加了新行?
- 这样做有缺点吗?例如,在更新父表等时性能等等,或者,是否存在任何兼容性问题(如果我选择一个唯一且不太可能被其上运行的其他内容使用的视图名称,那么实际创建我们自己的东西是安全的查看?请记住,我们实际上并未维护系统本身运行的软件)。
我要创建此视图的原因是因为我们必须从具有超过30m条目的表中抽出一些信息,而无法真正订购或索引该信息(同样,不是我的设计,而是软件创建者)。
任何帮助将不胜感激!谢谢
编辑:要澄清我实际上并没有自己去测试或我会进行测试。对于一个,我不知道创建自己的观点的含义(因此是最后一个问题子弹),两个我主要收集研究以介绍我的老板。
编辑:实际上,您知道什么,我不会在这里问第二个问题,因为这是另一个问题。这与如何找到唯一的字段或任何一个有关,这是这个问题的旁注。这是关于建立观点,它的任何含义,以及如果它会做我追求的事情。
在db2中的视图中,在i。
但是,您可以在i(6.1、7.1、7.2)的当前支持的DB2版本中使用一个常见的表表达式。
在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行时都会进行全表扫描。因此性能可能会很烂。
我很难相信您没有什么可以创建索引并用于订购的。但是,如果确实如此,请考虑添加一列以满足您的需求。对于i的db2中的表格,不需要可怕的lvlchk(*no)或重新编译现有的RPG应用程序。