以下查询的结果对我来说很奇怪,(我是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
**显然这是由于“OPTIMIZE FOR 100 ROWS”子句和使用标量值(ROWNUMBER()进行过滤(在WHERE子句中)。
**如果我进一步缩小我的问题范围,我想知道第一次查询和第二次查询的差异顺序的原因是什么。
全部谢谢
答案 0 :(得分:0)
当您没有明确指定'order by'时,结果是无序的,即:在获取数据时返回数据。通常这会导致使用指数的顺序。
您可能希望“解释”要查看的语句,db2实际执行的内容以及它使用的索引。 (db2exfmt -d database -e user -t -v%-w -1 -s% - #0 -n%-g OTIC)