非常奇怪的问题,有数据库编程经验人员看过来一下,急,急,急

fengleng 2005-10-14 02:20:47
本人在编一个程序基于ACCESS库,经常需要往表中进行几十万条记录量的数据更新,执行是SQL语句一条一条插入的。速度很慢,十万条要三分钟,而且碎片很大,空白库中插入十万条,库会变成100M左右,但是实际上数据只占7M左右,现在更受不了的是,在有的时候会变成上G的空间(在有的机器上频繁出现,在有的机器上很少出现。虽然可以压缩,但是带来很大隐患),请教一下,是何原因。如何有插入产生很少碎片,以及提高大概几十万条这个量级的插入速度的方法。望大家支招,不胜感谢。
...全文
699 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
stevenjscn 2006-05-08
  • 打赏
  • 举报
回复
应该没问题,但你在INSERT之后,最好用代码压缩一下。
xjq2003 2005-10-19
  • 打赏
  • 举报
回复
sql语句执行很快的啊!
fengleng 2005-10-18
  • 打赏
  • 举报
回复
请教楼上的具体怎们实现
痞子酷 2005-10-17
  • 打赏
  • 举报
回复
如果是小型数据库,你可以试试采用文本数据库。
如果总数据量低于100万,最好不过。
你将文本加载内存,修改增加保存文本。速度可能比输入库要快。
不会有碎片等问题。查询速度空前无比。
你可以使用STL,
fengleng 2005-10-17
  • 打赏
  • 举报
回复
多谢楼上的各位兄弟,现在数据来源是txt格式,现在是在程序中 进行数据导入,做的是增加而不是覆盖形式。gxd305兄弟说的是select into不过 那个好像只能插到一个新表里吧。发现access可以手工在菜单里把TXT文件里数据附加到一个表里不知怎们实现的
nikita2000 2005-10-16
  • 打赏
  • 举报
回复
数据量大就不要用桌面数据库了,同情楼主,我也有过类似的遭遇,后来改用别的网络数据库(Firebird)就没有类似的困境了。
gxd305 2005-10-16
  • 打赏
  • 举报
回复
你的数据源是什么格式的呀

如果用一句SQL 可以实现的话那速度就可以提高很多了

比如
insert into table1(field1,field2,field3)
select field1,field2,field3
from [Sheet1$] in '1.xls'[EXCEL 8.0;]
where (....)

这是从Excel 中读取数据 存储到 Access中的语句
也可以
select * from [Sheet1$] into table1
in '1.xls'[EXCEL 8.0]

当然别的数据库也可以用这种方式了,(插入到Access数据库中)
比如文本文件,foxpro的数据文件等等。

还有 你可以将数据一条一条的保存为文本文件,然后用一条SQL语句 插入到Access中去,
那速度也应该比你一条一条的插入到数据库中快一些。
h98458 2005-10-15
  • 打赏
  • 举报
回复
是索引的问题
不过一般Access处理很多数据时本来就慢
还有数据量那么大,为什么不用SQL SERVER呢?
zjsyw 2005-10-15
  • 打赏
  • 举报
回复
如果字段多索引多,ACCESS十万条用三分钟实际上已经不错了。
  • 打赏
  • 举报
回复
是索引的问题 取消所有的索引
采用文本方式导入法 让程序先往文本写入 然后用ACESS导入文本数据
weill 2005-10-14
  • 打赏
  • 举报
回复
十万条要三分钟这应该是正常的。
只怕SQL中如果你一条一条插,十万条只怕也要3分钟。

碎片问题我没有经验,不过应该不会。
dm1cyg 2005-10-14
  • 打赏
  • 举报
回复
插入用存储进程
数据库吗,改了把
fengleng 2005-10-14
  • 打赏
  • 举报
回复
还望大家给些在access上的实现方式
binbin 2005-10-14
  • 打赏
  • 举报
回复
试试mysql
zzq4823 2005-10-14
  • 打赏
  • 举报
回复
换数据库同时建存储过程
steelxu5 2005-10-14
  • 打赏
  • 举报
回复
有可能是索引和主键的事,
可能是因为数据库在存数据时为了检索快速,物理存放地址会根据在排序树上的位置而变化,当你插入数据时,不停的调整位置,所以产生了很多碎片,而且没有回收,
数据库原理中好象都是用的B+树,从理论上来讲,先排序后插入意义不大,但也许可以试一下
简单的办法是换成SQL或是ORACLE的数据库
youngzi 2005-10-14
  • 打赏
  • 举报
回复
有没有建索引?
这么大的数据量就不要用ACCESS了

1,178

社区成员

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

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