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」句と、(WHERE 句での) フィルタリングのためのスカラー値 (ROWNUMBER() の使用) の両方によるものです。

** 質問をさらに絞り込むと、最初のクエリと 2 番目のクエリの順序が異なる理由を知りたいです。

皆さんありがとう

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 に答える