DB2按查询中未提及的列对结果进行排序

时间:2013-01-08 18:59:07

标签: database oracle db2 db2-connect

以下查询的结果对我来说很奇怪,(我是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子句中)。

**如果我进一步缩小我的问题范围,我想知道第一次查询和第二次查询的差异顺序的原因是什么。

全部谢谢

1 个答案:

答案 0 :(得分:0)

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

您可能希望“解释”要查看的语句,db2实际执行的内容以及它使用的索引。 (db2exfmt -d database -e user -t -v%-w -1 -s% - #0 -n%-g OTIC)