将近10万条的记录,有没比逐条insert快的方法
我的程序搜索一些信息,
这些信息的内容是长度为20到300的字符串,
如:
ftp://192.168.32.12/movie/kingkong/all.rmvb
ftp://192.168.51.6/电影/中国/香港/周星驰/功夫/01.rmvb
...
一般情况下,总共有近10万条记录
我的程序现在是搜索到一条记录,马上就insert如数据库,然后继续搜索,
我感觉速度上有点慢
如果将搜索到的记录全部写到文本文件中,等搜索结束之后再一次性写入数据库。
这样行不?
速度会不会比逐条insert快呢?
谢谢
问题点数:50、回复次数:7Top
1 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-06-03 19:22:55 得分 0
写到文本文件中后,直接用DTS导入即可。Top
2 楼zjcxc(邹建)回复于 2006-06-03 20:59:47 得分 0
为什么不直接用
insert tb select ... from xx where ....
呢?Top
3 楼ppact(天下有雪)回复于 2006-06-03 22:15:48 得分 0
邹老大的方法应该不错的,批插入Top
4 楼playwarcraft(时间就像乳沟,挤挤还是有的)回复于 2006-06-03 23:00:00 得分 0
我觉得还是先导成txt文档,然后用DTS,便于维护吧Top
5 楼loveangela(非留不可)回复于 2006-06-04 10:59:34 得分 0
如果是在不同的数据库间 就不好用insert tb.. select ... from table
, 如何快速插入数据呢?
写到文本文件中后,直接用DTS导入 我之前试过,仍然是比较慢的。
不知大家有何意见!
Top
6 楼filebat(Mark)回复于 2006-06-06 11:13:53 得分 50
我感觉楼主的意思是:数据是程序一条一条慢慢产生的。
他不想每产生一条记录就插入到数据库中,而想等到达一定量后,再插入到数据库中。
这样可以减少I/O读取次数。
所以觉得邹老大的insert tb select ... from xx where ....应该不行吧。
但是,我想如果每条记录都写到txt文档中,然后再bcp或DTS到数据库中, 这样的做法应该也不会快到哪里吧。
因为I/O次数不但没有减少,反而增加了。
呵呵, 我也没什么好的方法。要不在内存中维护一张类似中间表。记录先插入到内存的中间表中,等数据到一定数量时,然后再写到数据库去。
这样,用空间来换时间, 应该快点。
不知道诸位老大,有何高见。Top
7 楼LiveAsUWant()回复于 2006-06-06 11:23:00 得分 0
楼上:呵呵, 我也没什么好的方法。要不在内存中维护一张类似中间表。记录先插入到内存的中间表中,等数据到一定数量时,然后再写到数据库去。
这样,用空间来换时间, 应该快点
中间表可以用临时表,个人认为临时表相当于内存表
CREATE TABLE #Tmp
再用
insert tb select ... from #Tmp
应该会快 我以前试过Top




