簡體   English   中英

如何為整個BIGINT有效地編寫鍵控邏輯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM