Что означает "ORDER BY (SELECT NULL)"?
Следующий SQL - это Ицзик Бен-Ган, который используется для создания таблицы чисел. Что означает 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;
Спасибо!
Ответы
Ответ 1
ROW_NUMBER требует синтаксически ORDER BY
. Вы не можете использовать его без него. SELECT NULL
- это взломать эту ошибку, не применяя какой-либо конкретный порядок. В этом случае нам не нужно выполнять какой-либо заказ, поэтому самым быстрым вариантом является использование SELECT NULL
.
Оптимизатор видит этот трюк, поэтому он не имеет затрат времени исполнения (это утверждение легко проверяется, смотря на план выполнения).