经典论坛's Archiver

changanti 发表于 2008-7-2 10:54

如何高效的将5万个不同的随机数插入到数据库中?

高手们好:请教一个问题,



     我现在有一个需求:我现在需要生成5万个不同数据使用(mt_rand方法),然后插入到数据库中,以备后来使用。





[b][color=Red]现在的问题是:(1)   5万个数据,很多。放在数组中的话,占用内存很大,甚至内存不够用;

(2)如果不放入数组中的话,如何保证这5万个数据互不相同?[/color][/b]



请高手指点。谢谢。

CuTeCuBe 发表于 2008-7-2 11:39

SQL Server的话,直接用查询分析器执行就可

declare @i int
set @i=0
while @i<50000
begin
insert into test (xxx,xxx) values (CAST(rand()*10000 as int),'aaa')
set @i=@i+1
end

carmen1003 发表于 2008-7-2 14:48

rand随机数还是存在重复的可能性吧?

changanti 发表于 2008-7-2 15:36

我用的是mysql。
为了避免重复,我把生成的随机数暂时放在一个数组里面了。 以后再生成都去检查一下看看新生成的数是否已经存在。

但是这样的话,效率很低。(我测试已经出现问题:内存不够用或者是页面执行时间过长)


请高手指点。
谢谢。

carmen1003 发表于 2008-7-2 15:51

如果你用uuid的话,那肯定不会有重复了,所以不用考虑重复验证问题,直接入库就OK了。

playboy2925 发表于 2008-7-3 09:51

你用一个有规律不随机的字符串 如 00001~50000

去和一个 随机的字符串相连

也就是  

00001+随机字符串
00002+随机字符串
00003+随机字符串
00004+随机字符串


.。。



50000+随机字符串


一定是不重复的。

eLore 发表于 2008-7-3 19:05

6楼的方法很好,就算随机字符串相同,但因为前缀不同,所以不会重复

flash665 发表于 2008-7-4 09:27

把字段设置为unique 唯一约束  这样就保证了不重复

事务会报错,但仍然可能实现插入的操作吧.

我说的是mssql,没用过mysql不知道会不会不同

页: [1]



Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.