DB2/400中:
SELECT * FROM TABLE1 WHERE CODITION1
OPTIMIZE FOR 1 ROW
(在DB2/400上运行通过)
大家说说,他的好处是什么!
neo2718 回复于:2002-05-09 17:25:39请大家斧正:
DB2/400的确支持这个子句,当使用这条子句的时候它将使得DB2在假定仅仅只有一条记录被返回的基础上去优化此条语句。他对于语句的执行没有影响(除了影响ACCESS PATH的生成),使用这个子句的好处在于如果仅仅检索非常少的记录的时候,响应速度将比较快。为什么呢?因为: prefetch使得DB2搜集每条返回的记录的ID号,RIDS将被存储起来,这样使得DB2不用再次去读pages,那么DB2将读在一个page上的记录,这样可以减少I/O.但是在联机交易中,这将使得联机用户等待的时间较长(等待DB2获取RIDS和排序RIDS),所以即使不去prefetch(就是DB2将重读PAGES)的速度也比prefetch快。
bigfu 回复于:2002-05-23 11:56:16高手,佩服!!
grx6666 回复于:2002-06-11 09:06:24 john2688@btamail.net.cn
lawrance 回复于:2002-07-21 18:15:23厉害!
hbxtbj 回复于:2002-09-09 16:21:11XX
selen 回复于:2002-09-30 10:16:40分析的精辟!
charlielou 回复于:2002-10-06 13:14:06很少在AS400用SQL所以我无话可说。
stephan 回复于:2002-10-12 10:32:15neo2718,我有两个不太明白的地方,
1)RIDS是什么?是记录的物理存储地址吗?在DB2/400中它是存放在哪里的?
2)DB2/400的prefetch是在哪儿设置的?
leo111931 回复于:2002-10-19 15:12:37真是历害.AS/400还没有见过,不过DB2用过一段时间,只要是写程序,他的SQL与标准SQL不太一样,而且,在ES9000,R6000.WINDOWS上的也不一样.
Pythagoras 回复于:2002-10-24 09:14:45RID就是ROW ID,应该是页内记录的偏移量,通常是4或5字节,取决于你建表时候的定义.
YT 回复于:2002-11-02 04:39:27up
Pythagoras 回复于:2004-03-27 09:48:52NEO讲的PREFETCH应该是专指LIST PREFETCH吧,一般指定OPTMIZE FOR n ROW的话,都不会使用LIST PREFETCH的。
发表评论