[英]How to efficiently write keying logic for full range of BIGINT
我有整列整數流入的列。 在INT
列上生成鍵時,我需要將0和負數向下推(排序為DESC),將正鍵向下推到頂部(排序為ASC / DESC)。 我想出了兩種方法,但我不確定哪種方法最好
方法1:整理但不確定可擴展性
WITH t1(c1) AS
(
SELECT 11 UNION ALL
SELECT 2 UNION ALL
SELECT 0 UNION ALL
SELECT -1 UNION ALL
SELECT -11
)
SELECT c1, ROW_NUMBER() OVER (ORDER BY
CASE WHEN c1 <=0 THEN c1 END DESC ,
CASE WHEN c1 >0 THEN c1 END ASC) keys
FROM t1 ;
方法2:可擴展
WITH t1(c1) AS
(
SELECT 11 UNION ALL
SELECT 2 UNION ALL
SELECT 0 UNION ALL
SELECT -1 UNION ALL
SELECT -11
)
SELECT c1, ROW_NUMBER() OVER (ORDER BY c1 ASC) keys
FROM t1
WHERE c1 >0
UNION ALL
-- Need to include Max keys from previous step in actual implementation
SELECT c1,
maxkeys + ROW_NUMBER() OVER (ORDER BY c1 DESC) keys
FROM t1
WHERE c1 <= 0
;
請提出其他更好的可伸縮性替代方案( BIGINT
范圍)。
經過一輪性能測試后,在這種情況下,我們發現選項1更優雅,更優化。 另外,該代碼段是為許多表動態生成的,它易於配置以及打開和關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.