数据库问题,高手请进,急,在线等等待...(300分)

  • 主题发起人 主题发起人 dxpjj
  • 开始时间 开始时间
D

dxpjj

Unregistered / Unconfirmed
GUEST, unregistred user!
1。我现在需要自动生成一个以0-9数字组成的7位数(从0000000-9999999所有的数,即共1千万个数),然后删除其中所有7个数字都不相同的数字(如0123456,1023456,3456789等),再将剩下的数列举出来.
2.我现在用Access数据库结构如下
号码
0000000
0000001
.......
9999999
但我用for循环语句进行一条一条增加,速度其慢,大概每秒增加20条记录,我算了一下按这样的速度我需要等待至少6昼夜的时间,有没有更好的方法能够解决这一问题?急!有没有好的思路或解决方法?我很急,原以高分相送,需要再加分!
 
用大一点的数据库吧 起码要支持存储过程的

1千万条数据 就算都写进去了 access 估计动都动不了
 
用ADOQUERY。
“insert into 表名 vlues ”
应该一秒能加N多吧
 
如果一条一条循环则一秒能加20多条,太慢了
 
哇,一下搞这么多,估计access动不了。
 
你内存够大的话,用内存表,可以加快存储速度。
不过一条条循环速度快不了,最好能都塞在数据库,使用SQL语句来选出来。
我想应该数据库优化后的速度应该更快吧
 
你要删除的数据数量很有限,用排列完全可以把他们逐个剔除
0123456
0123457
0123458
……
所以现在的问题就是你先把
“从0000000-9999999所有的数,即共1千万个数”写到数据库,
问题简化为1000万条数据库的写入,
1、建议你找10个服务器,把数据分10段录入,处理后拼接
2、建议用存储过程的方法向服务器添加记录
3、建议使用ORACLE数据库,并且一定把此字段做成索引
 
你能不能先测试一下,不加规则,直接把一千万条数据导入Access。
看看需要多长时间。并且,导入进去之后再试着选几条记录出来。
看看数据库是否受得了。如果这些测试不能让你满意的话,解决这个问题
也就没有什么意义了。
而根据我个人的经验,换个数据库才有解决这个问题的基础。
建议使用Oracle。
 
Oracle的速度有多快?
 
你这样一条一条的插入,速度永远也不可能快!!
是不是可以考虑先用缓冲区写入文件,
然后用DTS导?
 
you can only insert the data according the role, this is to say,
if the data is your want, then insert. otherwise next.


 
good lucky to you when you finish this project.

 
建议用oracle,我以前编写一个系统时也是达到千万数量级,我测试了一下,用Oracle利用
缓冲区的话速度还可以
 
我也遇到过这样的问题,关键是ADO+ACCESS的效率太差。通过CACHE,可能有一些效果,但不会有大的出入。网上大家都说ADO+ACCESS效率高,有几个实际测试过。而且,1千万条记录,ACCESS估计是动不了了。还是考虑换数据库为好。
可参见 http://www.delphibbs.com/delphibbs/dispq.asp?lid=1336629。
 
写个算法,只把符合条件的数写入数据库
 
建議首先更換數據庫, 然後自己寫個儲存過程, 讓數據庫自己處理, 并把符合條件的數字先
寫入去.
 
同意David1289的觀點,因為你在刪除時也判斷,為何不放在寫入的時候判斷。豈不
是省去了寫入的動作,在後台執行可能比前台執行要快許多
 
各位富翁们,你们所说的只是自已的想法,都没有具体的实现方案!我已经用Access2000做了试验,1000万条记录完全能胜任,而且生成后速度与原来一点
都没有变慢(至少我感觉上没有明细的变慢),完全不会"估计动都动不了".
我是通过递归来增加记录的,而没有一条一条地去循环1000万次,这次测试:生成1000万条记录共用去时间不到1.5个小时,我的机器是128M内存,赛扬733的CPU.
 
后退
顶部