web-dev-qa-db-ja.com

"ORDER BY(SELECT NULL)"はどういう意味ですか?

次のSQLは、数値テーブルの生成に使用されるItzik Ben-Ganからのものです。 order by (select null)部分はどういう意味ですか?ありがとう。

DECLARE @number_of_numbers INT;
SELECT @number_of_numbers = 100000;

WITH    a AS ( SELECT   1 AS i
               UNION ALL
               SELECT   1
             ),
        b AS ( SELECT   1 AS i
               FROM     a AS x ,
                        a AS y
             ),
        c AS ( SELECT   1 AS i
               FROM     b AS x ,
                        b AS y
             ),
        d AS ( SELECT   1 AS i
               FROM     c AS x ,
                        c AS y
             ),
        e AS ( SELECT   1 AS i
               FROM     d AS x ,
                        d AS y
             ),
        f AS ( SELECT   1 AS i
               FROM     e AS x ,
                        e AS y
             ),
        numbers
          AS ( SELECT TOP ( @number_of_numbers )
                        ROW_NUMBER() OVER ( ORDER BY ( SELECT   NULL
                                                     ) ) AS number
               FROM     f
             )
    SELECT  *
    FROM    numbers;

ありがとう!

44
Just a learner

ROW_NUMBER は、構文的にORDER BY句を必要とします。あなたはそれなしでそれを使用することはできません。 SELECT NULLは、特定の注文を強制せずにエラーをシャットダウンするハックです。この場合、順序を強制する必要がないため、SELECT NULLを使用するのが最も速いオプションです。

オプティマイザーはこのトリックを確認するため、実行時のコストはかかりません(この主張は実行プランを確認することで簡単に確認できます)。

76
usr