0

以下查询的结果对我来说很奇怪,(我是 DB2 的新手)。它按我在查询中没有提到的表中的列对结果进行排序。

WITH RESULT AS ( 
  SELECT T1.*, ROWNUMBER() OVER() AS RNUM 
    FROM TableNAmeT1 
   WHERE column1= 'xyz'
) 

SELECT * 
  FROM RESULT 
 WHERE RNUM BETWEEN 1 AND 100 
 ORDER BY ORDER OF RESULT OPTIMIZE FOR 100 ROWS

当我使用以下查询时它不排序

WITH RESULT AS ( 
  SELECT T1.*, ROWNUMBER() OVER() AS RNUM 
    FROM TableNAmeT1 
   WHERE column1= 'xyz'
) 

SELECT * 
  FROM RESULT  
 ORDER BY ORDER OF RESULT
  • 这是因为表的索引还是其他什么,通常这些表是FIFO

** 显然,这是由于“OPTIMIZE FOR 100 ROWS”子句和使用标量值(ROWNUMBER() 进行过滤(在 WHERE 子句中)。

** 如果我进一步缩小我的问题,我想知道第一个查询和第二个查询的不同顺序的原因是什么。

谢谢大家

4

1 回答 1

0

当您没有明确指定“order by”时,结果是无序的,即:数据在获取时返回。通常这会导致使用索引的顺序。

您可能想“解释”这些语句以了解 db2 实际执行的操作以及它使用的索引。(db2exfmt -d 数据库 -e 用户 -t -v % -w -1 -s % -# 0 -n % -g OTIC)

于 2013-01-09T11:05:32.063 回答