ADO和Access数据保存效率问题。(4000数据30秒)

yeeyee 2008-10-19 09:25:52
开发用 ADO+Acce

数据库设计很简单。

ID Num Value
Text(32) Int Double

要保存 4000 数据(或以上)到数据库,花时间30秒以上,要提升效率,要注意哪些点?
...全文
212 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangsp 2008-10-20
  • 打赏
  • 举报
回复
不要建立索引 最好使用SQL语句
lake_cx 2008-10-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qkhhxkj102 的回复:]
我也是保存42000条记录是从EXCEL里读出保存到ACCESS里的,用时可能要半个来小时吧,
现在也还没有找到好的办法让速度快点
[/Quote]
一条SQL语句搞定的还用半个小时?
lake_cx 2008-10-20
  • 打赏
  • 举报
回复
Access中执行:
select * into table1 from [Sheet1$] in "C:\test.xls" "Excel 8.0;"
qkhhxkj102 2008-10-20
  • 打赏
  • 举报
回复
有二十二个字段,

我是每次读出100条记录到结构数组里,再保存到ACCESS里,

就这样一直下去,

lake_cx 兄弟有好办法说一下

mygodsos 2008-10-20
  • 打赏
  • 举报
回复
要是不考虑保密性,桌面数据库还是用vfp的环境来弄比较快,10万条记录刷一下就给你弄完。
cncharles 2008-10-19
  • 打赏
  • 举报
回复
LockType改成ltBatchOptimistic试试, 再说30S也不是很长的。
yeeyee 2008-10-19
  • 打赏
  • 举报
回复
不是的,就是把一个 4000 的数组,数据保存到 ACCESS 。
javaxi 2008-10-19
  • 打赏
  • 举报
回复
需知道你是如何更新,
如果是sql通过where关联,那么是有优化方案的
lake_cx 2008-10-19
  • 打赏
  • 举报
回复
你一次有4000条数据就意味着肯定有数据源,数据源是什么?txt、xml或者???
不可能一次输入4000条数据吧,所以你这不是数据保存的问题,而是数据导入的问题。
cncharles 2008-10-19
  • 打赏
  • 举报
回复
如果第一次导入的时候把主键与索引删除, 导入完后再加上。

NCHAR改成VARCHAR
qkhhxkj102 2008-10-19
  • 打赏
  • 举报
回复
我也是保存42000条记录是从EXCEL里读出保存到ACCESS里的,用时可能要半个来小时吧,
现在也还没有找到好的办法让速度快点
僵哥 2008-10-19
  • 打赏
  • 举报
回复
如果只是为了保证写入(保存)的速度,那就是少建或者不建索引.操作最好使用SQL语句.
天行归来 2008-10-19
  • 打赏
  • 举报
回复
用7楼的方法可以提高效率,数据插入用SQL,另外,多条SQL一次性执行。
var
strSql: string;
begin
strSql := '';
...
for i:=1 to n do //一批插入n条
begin
strSql := strSql+'insert into myTable(id,num,value) values...;'; //每条SQL间要加上分号';'
end;
...
ADOCommand.Execute;
...
end;
僵哥 2008-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 cncharles 的回复:]
LockType改成ltBatchOptimistic试试, 再说30S也不是很长的。
[/Quote]
最好还是人为手动提交,特别是使用显示事务,如果只是单纯的把LockType改为ltBatchOptimistic,一来有可能数据库不支持该选项,二来就算支持的话,会有极大的内存消耗.

4000笔数据,提交需要30多秒,如果是一笔笔提交的话,那么每秒提交就有一百多次,但是如果你每一次提交多笔的话,减少了提交的次数,是不是效率就会有所提升?

2,497

社区成员

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

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