Добавить комментарий

Изображение пользователя st.

Вряд ли быстрее

Вряд ли заметно быстрее. Выигрыш от уменьшения размера внутренней временной таблицы (2 колонки вместо 5 на составном ключе) будет нивелироваться необходимостью делать соединение. Видимо, вы что-то с тестами "нахимичили" :) Кеш сбрасывали?

Я прогнал для полноты картины: 725 сек на 5 колонках и 709 на двух.

DECLARE @d datetime
SELECT @d = getdate()
SELECT @d
DBCC DROPCLEANBUFFERS;
 
WITH ordered_orders AS (
  SELECT O.*,
         row_number() OVER(
           ORDER BY O.product_code ASC,
                    O.customer_code ASC,
                    O.order_type ASC,
                    O.qty_date ASC
         ) AS row_num
    FROM orders O INNER JOIN customers C ON O.customer_code = C.customer_code
    WHERE C.country_code = 'IT'
)
SELECT *
  FROM ordered_orders
  WHERE row_num BETWEEN 400001 AND 500000
GO 
 
DECLARE @d datetime
SELECT getdate(), datediff(ss, @d, getdate())
SELECT @d = getdate()
SELECT @d
DBCC DROPCLEANBUFFERS;
 
WITH ordered_orders AS (
  SELECT O.order_id,
         row_number() OVER(
           ORDER BY O.product_code ASC,
                    O.customer_code ASC,
                    O.order_type ASC,
                    O.qty_date ASC
         ) AS row_num
    FROM orders O INNER JOIN customers C ON O.customer_code = C.customer_code
    WHERE C.country_code = 'IT'
)
SELECT O.*, ordered.row_num
  FROM ordered_orders ordered
  join orders O on o.order_id = ordered.order_id
  WHERE row_num BETWEEN 400001 AND 500000  
SELECT getdate(), datediff(ss, @d, getdate())