SQL快速生成連續整數
阿新 • • 發佈:2020-07-28
很多時候需要用到連續的id進行資料對比,如判斷是否連續等問題。那麼,生成連續整數的方式有多種,首先容易想到的是逐步迴圈,如果想生成2kw條記錄,則需要迴圈2kw次進行插入,那麼有沒有其他方式呢,效率相對於逐步加一有多少提升呢。
首先建立一張存放記錄的表,插入1條記錄。
CREATE TABLE dbo.Nums(n INT); INSERT INTO dbo.Nums VALUES(1);
通常容易想到的是迴圈插入,每次插入1條,插入20W次,大約耗時10幾分鐘。。。
按照指數級插入,20W資料只需要插入18次,1s即可完成。
DECLARE @max AS INT, @rc AS INT;SET @max = 200000; --資料總數 SET @rc = 1; --插入次數 WHILE @rc <= @max BEGIN INSERT INTO dbo.Nums SELECT n + @rc FROM dbo.Nums WHERE n+@rc<=@max; SET @rc = @rc * 2; END
具體邏輯理解如下:
第1次插入1條,表資料變為:1 ,2
第2次插入2條,表資料變為:1 , 2 ,3, 4
第3次插入4條,表資料變為:1 ,2 ,3 ,4 ,5 ,6 ,7 ,8
第4次插入8條,表資料變為:1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,...... ,16
......
第17次插入65536行,表資料變為:1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,...... ,131072
第18次插入剩餘的68928行。