很多時候需要用到連續的id進行資料對比,如判斷是否連續等問題。那麼,生成連續整數的方式有多種,首先容易想到的是逐步迴圈,如果想生成2kw條記錄,則需要迴圈2kw次進行插入,那麼有沒有其他方式呢,效率相對於逐步加一有多少提公升呢。
首先建立一張存放記錄的表,插入1條記錄。
createtable dbo.nums(n int
);insert
into dbo.nums values(1);
通常容易想到的是迴圈插入,每次插入1條,插入20w次,大約耗時10幾分鐘。。。
按照指數級插入,20w資料只需要插入18次,1s即可完成。
declare@max
asint, @rc
asint
;set
@max
=200000
; --資料總數
set@rc=1
; --插入次數
while
@rc<=
@max
begin
insert
into dbo.nums select n +
@rcfrom 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行。
連續正整數之和
題目描述 乙個正整數有可能可以被表示為n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標準輸出上列印出符合題目描述的...
連續正整數問題
題目描述 乙個正整數有可能可以被表示為 n n 2 個連續正整數之和,如 15 1 2 3 4 5 15 4 5 6 15 7 8 請編寫程式,根據輸入的任何乙個正整數,找出符合這種要求的所有連續正整數序列。輸入資料 乙個正整數,以命令列引數的形式提供給程式。輸出資料 在標準輸出上列印出符合題目描述...
程式設計題 連續整數
牛牛的好朋友羊羊在紙上寫了n 1個整數,羊羊接著抹除掉了乙個整數,給牛牛猜他抹除掉的數字是什麼。牛牛知道羊羊寫的整數神排序之後是一串連續的正整數,牛牛現在要猜出所有可能是抹除掉的整數。例如 10 7 12 8 11 那麼抹除掉的整數只可能是9 5 6 7 8 那麼抹除掉的整數可能是4也可能是9 輸入...