**use
tempdb
go--
建立測試表
create
table
tb(id
char(8
))--
建立用於自動過濾重複值的唯一索引
create
unique
index
ix_tb
ontb(id)
with
ignore_dup_key
go--
測試資料插入的處理時間, 記錄開始處理的時間點
declare
@dtdatetime
set@dt
=getdate
()--
插入隨機資料
setnocount
ondeclare
@row
intset
@row
=1000000
--設定總記錄數
while
@row
>
0begin
--顯示提示資訊, 表示還需要插入多行資料
raiserror('
need %d rows',
10, 1,
@row
) with
nowait
--插入隨機的位編碼資料
setrowcount
@row
insert
tb select
id =
right
(100000000
+convert
(bigint
, abs
(checksum(
newid
()))), 8)
from
syscolumns c1, syscolumns c2
set@row
=@row
-@@rowcount
end--
顯示插入資料使用的時間
select
begindate
=@dt
, enddate
=getdate
(),
second
=datediff
(second,
@dt,
getdate
()),
go--
顯示最終的結果記錄是否正確
select
count(*
) from
tbgo
--刪除測試
drop
table
tbdeclare @dt datetime
set @dt = getdate()
set nocount on --不返回影響的行數,可以提高效率
declare @row int
set @row = 1000000
while @row >0
begin
raiserror('need %d rows', 10, 1, @row) with nowait --有重複行發生的時候把資訊輸出到客戶端
set rowcount @row --select ... from syscolumns c1, syscolumns c2的行數會超過100w,這裡只取100w
insert testtb(code) select ---一次性的插入100w條記錄,如果有重複的記錄,那需要第二次執行插入,以此類推,一直到插入100w條為止。
id = 'abcd' + right(100000000 + convert(bigint, abs(checksum(newid()))), 8)--100000000用來確保生成的隨機數字有8位長度,
from syscolumns c1, syscolumns c2 --這裡使用syscolumns只是為了獲得大於100w的記錄而已。至於隨機的**是個這個表是沒有關係的。
set @row = @row - @@rowcount --根據影響的行數,設定迴圈的時候需要插入的記錄數量,這個記錄數量等於本次操作中重複的記錄的行數。
end
select begindate = @dt, enddate = getdate(), second = datediff(second, @dt, getdate())
go select count(*) from testtb
go /*我的問題是
(1)為什麼使用checksum()來生成隨機數字?
(2)newid是生成乙個唯一標誌,既然它是唯一性的,怎麼會又有重複的呢?
(3)
返回按照表的某一行或一組表示式計算出來的校驗和值。checksum 用於生成雜湊索引。
雜湊表索引是數字型的嗎?
*/
raiserror('need %d rows', 10, 1, @row) with nowait --有重複行發生的時候把資訊輸出到客戶端
-- 這個是直接給提示資訊, 有重複時的提示資訊是sql自動丟擲的
insert testtb(code) select ---一次性的插入100w條記錄,如果有重複的記錄,那需要第二次執行插入,以此類推,一直到插入100w條為止。
-- 有重複的資料的時候, 重複的資料會自動過濾掉
checksum
返回在表的行上或在表示式列表上計算的校驗值。checksum 用於生成雜湊索引。
語法 checksum ( * | expression [ ,...n ] )
引數 *
指定在表的所有列上進行計算。如果有任一列是非可比資料型別,則 checksum 返回錯誤。不可比資料型別是 text、ntext、image、cursor 以及基本型別為前 4 個資料型別之一的 sql_variant。
expression
是除非可比資料型別之外的任何型別的表示式。
返回型別
int
000
Jmeter生成8位不重複的隨機數
預設該公式精確到毫秒級別,13位數 該公式精確到秒級別,10位數 如果引數需要為當前日期,那公式為 要求 對註冊介面進行100000次壓測,手機號已126開頭,後面的8位數不限 前言 在進行測試中,我們需要對註冊介面進行壓測100000次,那麼就要求手機號碼每次填寫的不一致,否則手機號使用一次後會出...
java實現100個不重複隨機數
前幾天,做了這個題目。發現實現起來有不同的路子。1.是隨便對int陣列內的數進行調換。2.是建立兩個陣列,乙個是1 100,另乙個從其中隨機取值。這裡可以設定乙個end變數記錄取值長度。1.public class randomarr for int i 0 i 100 i 2.public cla...
C 生成100 不重複的隨機數
方法1 思想是用乙個陣列來儲存索引號,先隨機生成乙個陣列位置,然後把這個位置的索引號取出來,並把最後乙個索引號複製到當前的陣列位置,然後使隨機數的上限減一,具體如 先把這100個數放在乙個陣列內,每次隨機取乙個位置 第一次是1 100,第二次是1 99,將該位置的數用最後的數代替。int index...