Access或其它数据库操作效率问题.欢迎讨论.

guojh021 2009-05-14 10:11:21
加精
对表进行操作.

方法1:先判断 是否存在记录key =value,如果存在,进行更新操作,如果不存在进行插入操作.
方法2:不管3721,先删除操作 where key =value,再插入操作.

这两种方法那个效率更高些?
或者还有更好的办法?

...全文
2050 61 打赏 收藏 转发到动态 举报
写回复
用AI写文章
61 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenyongjie 2010-04-23
  • 打赏
  • 举报
回复
学习学习
tonytwo 2009-05-24
  • 打赏
  • 举报
回复
学习学习
ACMAIN_CHM 2009-05-23
  • 打赏
  • 举报
回复

[Quote=引用 55 楼 wwwwb 的回复:]
问题二:ACCESS中 先DROP table + 再原样 create table vs delete from table全表删除 哪个快。

试验结果(47楼) delete from table全表删除 快
是吗?

create table是用什么方法?我一般是将空的工作表另存为一个临时表,
用SELECT * INTO 工作表 FROM 临时表 方法建立,这种方法比delete from table
还要慢?
这种方法的局限是如果有表间关系是不能删除的。
[/Quote]

这个猜想并不成立。

测试见下面贴子。
ACCESS的真假:四、"SELECT * INTO 工作表 FROM 临时表" 比 "CREATE TABLE 工作表 (...)" 速度快?
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/23/4210820.aspx


这次讨论中关于速度已经提出了 5 个猜想。

猜想一、DROP删除表再重建比Delete from Table1快吗?
[Quote=引用 45 楼 WWWWA 的回复:]
引用 40 楼 ACMAIN_CHM 的回复:


直接DROP 表,再建立一个新表

这种方法ACCESS会释放所占磁盘空间吗? 哪位有兴趣做个试验。很简单,删除一个大表,看MDB文件尺寸有没有变化。




这种方法用来避免DELETE FROM,节省时间,MDB只有压缩才会释放空间
[/Quote]

猜想不成立
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/16/4192311.aspx

猜想二、检查记录有无再insert 或 update 比 不管有无直接 delete 再 insert 快吗?
[Quote=引用楼主 guojh021 的帖子:]
对表进行操作.

方法1:先判断 是否存在记录key =value,如果存在,进行更新操作,如果不存在进行插入操作.
方法2:不管3721,先删除操作 where key =value,再插入操作.

这两种方法那个效率更高些?
或者还有更好的办法?
[/Quote]

猜想不成立
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/23/4210633.aspx

猜想三、往一个表中插入10万条记录的速度小于插入1万条记录吗?
[Quote=引用 28 楼 WWWWA 的回复:]
.....
比如插入10万条记录,速度 <插入1万条记录;
[/Quote]

猜想不成立
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/23/4210731.aspx

猜想四、"SELECT * INTO 工作表 FROM 临时表" 比 "CREATE TABLE 工作表 (...)" 速度快?
[Quote=引用 55 楼 wwwwb 的回复:]
问题二:ACCESS中 先DROP table + 再原样 create table vs delete from table全表删除 哪个快。

试验结果(47楼) delete from table全表删除 快
是吗?

create table是用什么方法?我一般是将空的工作表另存为一个临时表,
用SELECT * INTO 工作表 FROM 临时表 方法建立,这种方法比delete from table
还要慢?
这种方法的局限是如果有表间关系是不能删除的。
[/Quote]

猜想不成立
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/23/4210820.aspx

猜想五、MDB越大,打开、运行程序速度越慢
[Quote=引用 38 楼 WWWWA 的回复:]
MDB越大,打开、运行程序速度越慢,所以在对MDB操作中,一般避免DELETE数据,
直接DROP 表,再建立一个新表
[/Quote]

尚未测试,大家估计一下吧。
这其中涉及到 打开 的定义是什么。 运行程序 的定义是什么。
dongjh411526 2009-05-19
  • 打赏
  • 举报
回复
根据自己的具体情况而定吧!
ACMAIN_CHM 2009-05-18
  • 打赏
  • 举报
回复

55楼看来根本没细看测试代码啊。贴出你的测试结果看看。没有数据则只能做为猜想。
WWWWA 2009-05-18
  • 打赏
  • 举报
回复
故,效率高低是相对而言的,没有绝对,根据你的具体情况来判断
wwwwb 2009-05-18
  • 打赏
  • 举报
回复
问题二:ACCESS中 先DROP table + 再原样 create table vs delete from table全表删除 哪个快。

试验结果(47楼) delete from table全表删除 快
是吗?

create table是用什么方法?我一般是将空的工作表另存为一个临时表,
用SELECT * INTO 工作表 FROM 临时表 方法建立,这种方法比delete from table
还要慢?
这种方法的局限是如果有表间关系是不能删除的。
calmzeal 2009-05-18
  • 打赏
  • 举报
回复
支持 ACMAIN_CHM 实践派

我一般就是偷懒 Delete + Insert 来做
不过在外面套个Transation

另外Accesss数据库大小可以在代码中进行压缩的
hecker728 2009-05-18
  • 打赏
  • 举报
回复
看晕了
ACMAIN_CHM 2009-05-17
  • 打赏
  • 举报
回复
[Quote=a6230589 ]到底是哪一种?我不明白[/Quote]

总结一下:
------------------------------------------------------------------------
问题一:ACCESS中 INSERT INTO TT SELECT * FROM TT WHERE 。。。 + INSERT INTO TT SELECT * FROM TT WHERE 。。。 VS DELETE FROM 。。。。 + INSERT INTO 。。。 哪个快。

试验结果(15楼,32楼) DELETE FROM 。。。。 + INSERT INTO 。。。


------------------------------------------------------------------------
问题二:ACCESS中 先DROP table + 再原样 create table vs delete from table全表删除 哪个快。

试验结果(47楼) delete from table全表删除

测试方法如上。有不同建议和结果希望能贴出来分享。


QQ群 48866293 / 12035577 / 7440532 / 13666209
ACCESS专业论坛
http://www.accessbbs.cn/bbs/index.php .
http://www.office-cn.net/vvb/ .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://www.office-cn.net/home/space.php?uid=141646 .
手抓饼加辣 2009-05-17
  • 打赏
  • 举报
回复
到底是哪一种?我不明白
bean 2009-05-17
  • 打赏
  • 举报
回复
up
ACMAIN_CHM 2009-05-15
  • 打赏
  • 举报
回复

MDB越大,打开、运行程序速度越慢

测试设计: 新建两个空MDB文件db1,db2,然后各建两个表t1,t2,往db1.t1插入100,000记录,往db2.t1插入10,000记录。向db1.t2,db2.g2插入10,000数据。然后观察一下文件尺寸。
另建db3, 然后以ADO打开db1,db2 conn.open,conn.close 看看1000次的打开关闭耗时。
db3打开联接,然后测试1000次select * from t2 where id=2345;记录耗时对比,依次测试 update, delete等操作。


有兴趣的可以验证一下这些猜想。
ACMAIN_CHM 2009-05-15
  • 打赏
  • 举报
回复

直接DROP 表,再建立一个新表

这种方法ACCESS会释放所占磁盘空间吗? 哪位有兴趣做个试验。很简单,删除一个大表,看MDB文件尺寸有没有变化。

小范f-li.cn 2009-05-15
  • 打赏
  • 举报
回复
额!~
yshuui 2009-05-15
  • 打赏
  • 举报
回复
删除表,再建立表在ACCESS中的体积会增加的。
我一般使用第二种方法,如果数据表与其它数据关联比较多的时候,第二种方便一些,特别是在修改数据的时候!
aroc_lo 2009-05-15
  • 打赏
  • 举报
回复
不用说...

第一种方法比第二种方法好..


因为很多数据库,,数据删除并非真正物理的删除....

这不用说,就造成了大量的垃圾与日志信息..这样,,,对数据库系统本身就是一种负担..


第一方法.没有第二种方法方便,但是我个人认为.第一种方法,好.特别是以后,数据越来越多的时候..
WWWWA 2009-05-15
  • 打赏
  • 举报
回复
MDB越大,打开、运行程序速度越慢,所以在对MDB操作中,一般避免DELETE数据,
直接DROP 表,再建立一个新表
ACMAIN_CHM 2009-05-15
  • 打赏
  • 举报
回复

为什么要比体积啊?在12楼已经说明了,ACCESS不会自动释放这些被删除记录的磁盘空间。所有delete理论上肯定会导致数据库文件尺寸增涨得快。不过没测试过。有兴趣的可以自己验证一下。

上面的已个测试仅关注了执行效率也就是耗时。
wwwwb 2009-05-15
  • 打赏
  • 举报
回复
MDB的体积比较过没有?DELETE的体积增长速度及大小>INSERT、UPDATE
加载更多回复(40)

7,713

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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