如何快速的向数据库中写入一百万随机不重复的十位码

lion_lh 2003-10-11 06:33:11

数据库是MSSQL,要求插如的数据不能重复,速度要快,各位有啥高见!
...全文
176 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
foxnt 2003-10-14
  • 打赏
  • 举报
回复
是MSSQL的话,可以按照上面的方法来做。一次提交多条SQL,比如一次生成100条SQL,然后甩给MSQL,然后你那边线程继续生成下100个。两个线程来做,绝对不需要5小时。
yj0785 2003-10-14
  • 打赏
  • 举报
回复
先随机取数,然后把这个数在数据库里查询,如果有这个数就重新随机取,如果没有就插入。反复执行,一切OK。
这样做,能满足你的需求,但是不能保证速度。
lion_lh 2003-10-14
  • 打赏
  • 举报
回复
谢谢上面这么多回复,
我生成的数据需要是 随机的无规则的十位数字,类似数码防伪之类的数码,看不出规则无序的,
而且数据库中已经有了数据了要保证都不重复,今后还要向数据库中插入大量这样的数码,
有没有好的解决办法建议,谢谢大家!
shaw_jansin 2003-10-13
  • 打赏
  • 举报
回复
纠正一下,转为16进制不能,长度不能变为原来的2/3。
可以自定个32进制,就可以了。
zhoutian618 2003-10-13
  • 打赏
  • 举报
回复
这个需求有点怪,
深思ing.
sundayzhao 2003-10-13
  • 打赏
  • 举报
回复
对了,补充一下,如果你只有一台机器的话,可以先去掉此表的索引,主键。他们虽然可以提高查询速度,但是却会大大降低插入的速度。
sundayzhao 2003-10-13
  • 打赏
  • 举报
回复
我觉得你每次插入之前,首先从数据库取出最大值,如
select max(Id) from t1
where len(ID)=10
然后再此数值上开始累加数字,插入。这样插入的数据肯定不重复(假如就你这一台机器对此表进行处理)。而且少了判断数据重复的步骤,速度应该还可以。
hushuangyang 2003-10-13
  • 打赏
  • 举报
回复
在原来数据的基础上,比如有一列oldid,你可以根据原来数据列id以及列的逻辑顺序row计算新的newid:newid=oldid+10000000(防止重复)
chenylin 2003-10-12
  • 打赏
  • 举报
回复
有一个笔误:
一、最简单的办法就是设一个自增字段,初始值设置为100000000;
二、编程:
设一ADOdataset,Locktype:=ltBatchOptimistic;

var x:integer;
begin
randomiz;
for x:=1 to 100 do
begin
for y:=1 to 10000 do
begin
adodataset.append;
adodataset.fieldbyname('字段').asfloat:=1000000000+random(8999999999);
end;
adodataset.UpdateBatch;
end;
end;
速度应该还可以。
chenylin 2003-10-12
  • 打赏
  • 举报
回复
一、最简单的办法就是设一个自增字段,初始值设置为100000000;
二、编程:
设一ADOdataset,Locktype:=ltBatchOptimistic;

var x:integer;
begin
randomiz;
for x:=1 to 10 do
begin
for y:=1 to 10000 do
begin
adodataset.append;
adodataset.fieldbyname('字段').asfloat:=1000000000+random(8999999999);
end;
adodataset.UpdateBatch;
end;
end;
速度应该还可以。
shaw_jansin 2003-10-12
  • 打赏
  • 举报
回复
只有减少重复碰撞浪费的时间!
把时间简单的化为毫秒数:年*366*24*3600*1000+3位毫秒数
+2位随机数
如果过长的话可以每三位转为16进制,长度可变为原来的2/3。

关键字段,失败则重新生成。

不过百万条要花几个小时应该算正常了。
liufuyahong 2003-10-12
  • 打赏
  • 举报
回复
没试过,UP!
lion_lh 2003-10-12
  • 打赏
  • 举报
回复
to:huojiehai(海天子) 存贮过程不能中途停止,而且不知道进度.
to:chenylin(陈SIR) 你的做法不能保证生成的数与我原先数据库中有的数不重复.
ClarkLin(笑谈人生):
我的做法是在数据库中那设字段为关键索引字段,随机生成十位数,一条一条的插入数据库中,执行一百万次插入大概用了5个小时左右,各位还有没有好的建议,能加快速度,谢谢了
天_天天蓝 2003-10-11
  • 打赏
  • 举报
回复
奥,不好意思,写完了上面的回复之后,又回去看了一眼,原来要解决那个: 已经有数据的问题:

那就,把已有的数据和GUID做简单运算,加入数据库!
天_天天蓝 2003-10-11
  • 打赏
  • 举报
回复
我不懂您的意思,您是想解决让它快一些的问题,还是要解决"不重复"的问题:

前者,当然首先解决MySql以及,程序的配置问题,如果,这两者都搞定的话,可以考虑,建立多线程,同时往多个临时表中同时插记录,然后合并表(细细,只是个思路,可能更慢), 反正我觉得不能同时用多线程往一个表中同时插入(不过也可以试试).---反正俺不能瞎说.
后者,让我,当然是利用GUID做文章,当然长度可能需要一个公式作一下映射变换,才区区一百万条记录,绝不会重复的.
Storm2008 2003-10-11
  • 打赏
  • 举报
回复
好像不能太快把
huojiehai 2003-10-11
  • 打赏
  • 举报
回复
用存贮过程可能会快些
lion_lh 2003-10-11
  • 打赏
  • 举报
回复
谢谢上面的回复。
我的意思是数据库里已经有了很多数据了,我要再生成一百万个十位数,插到数据库中,要求都不重复,有什么办法提高速度
FrameSniper 2003-10-11
  • 打赏
  • 举报
回复
太简单了!既然是10位数,那么可以这样,比如第一个数字是0000000037,然后加4递增,并且使用一个循环来产生100万个量的数列,然后把数列看作一个整体。最后开始从1到100万中取随机数字,取一个在数列中取一个数字放入数据库中,同时把数列长度减1,第二次取的时候取随机值的范围是从1到100万减一,依次类推!

呵呵,实际这样做是模拟了随机数据组合的一个特殊情况!

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧