ACCESS的真假:二、检查记录有无再insert 或 update 比 不管有无直接 delete 再 insert 快吗?

原创 2009年05月23日 13:31:00

下面这个贴子中讨论了很多ACCESS中的一些猜想假设。

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

http://topic.csdn.net/u/20090514/10/a93475bd-e67e-45c8-aa1e-87168ba36d02.html#replyachor

 

引用 9 楼 wwwwb 的回复::
你自己可以测试一下,不过根据经验,
DELETE,再INSERT(数据量比只插入没有的记录大 ) ,再建索引,速度比较慢。


比如表 table1 (id int primary key,cname varchar(10)
+----+-------+
| id | cname |
+----+-------+
|  1 |    1  |
|  2 |    2  |
|  3 |    3  |
|  4 |    4  |
|  5 |    5  |
|  6 |    6  |
|  7 |    7  |
|  8 |    8  |
| .. |   ... |
+----+-------+

 

如果现在有一记录 (1234, 'KKKK'), 需要添加。那么两种方法。

方法一: 先做判断记录 1234是否存在,存在的话就 update table1 set cname = 'KKKK' where id=1234; 否则就 insert into table1 values(1234,'KKKK');

方法二: 不做任何判断,直接先 delete from table1 where id=1234; insert into table1 values(1234,'KKKK');

 

那么哪一种方法快?

在未做试验前,感觉上第二种方法,删除再添加记录应该是比较慢的一种。 但只是凭感觉,事实上是什么样呢,于是做了个简单的测试。

ACCESS 2003 SP3 + Windows 2000 SP4

新建一个空的t.mdb文件,然后建表 table1 (id int primary key,cname varchar(10)

新建一个模块,代码如下。

结果很有趣。在把  'CurrentProject.Connection.Execute "delete from table1 where id=1234" 这一句注释的情况下,也就是表中存在该记录。需要进行更新。

表中记录已存在 测试结果:
t1 start.     5/14/2009 12:02:36 PM
t1 end  .     5/14/2009 12:02:42 PM
t2 start.     5/14/2009 12:02:42 PM
t2 end  .     5/14/2009 12:02:52 PM
t3 start.     5/14/2009 12:02:52 PM
t3 end  .     5/14/2009 12:02:57 PM
t4 start.     5/14/2009 12:02:57 PM
t4 end  .     5/14/2009 12:03:05 PM

 

把这个注释找开,即模拟记录不存在的情况。

表中记录不存在 测试结果:
t1 start.     5/14/2009 12:14:22 PM
t1 end  .     5/14/2009 12:14:34 PM
t2 start.     5/14/2009 12:14:34 PM
t2 end  .     5/14/2009 12:14:48 PM
t3 start.     5/14/2009 12:14:48 PM
t3 end  .     5/14/2009 12:15:01 PM
t4 start.     5/14/2009 12:15:01 PM
t4 end  .     5/14/2009 12:15:14 PM

 

在更新情况下各方法所耗时。t1: 6s  t2: 10s t3: 5s t4: 8s
在插入情况下各方法所耗时。t1: 12s  t2: 14s t3: 13s t4: 13s

 

结论

插入情况下各方法差不多

更新的情况下则差异比较大。方法二T4() 比 方法二T2() 快 20%

 

大家如果有兴趣,可以得用上面的代码,将初始化table1的代码更改一下,比较添加更多的记录到100,000级,或者添加更多的字段进行测试。 如有什么不同结果希望能反馈给我以对此试验进行补充修正。

 

SQL Server索引进阶第十三篇:Insert,Update,Delete语句

INSERT     在第十一篇关于索引碎片的文章中,我们已经介绍了插入语句带来的影响,这里只是做一个总结性介绍,更详细的内容请翻回第十一篇。     无论是将数据插入堆表或是聚集索引表,表上...
  • liubinggege
  • liubinggege
  • 2013-04-19 21:52:13
  • 565

SQL中delete+insert 和update哪个快

首先说,顺序是insert为1,其次delete再者update因为delete和update要涉及到全表扫描, update是最慢的,如果数据很多的时候最好使用delete+insert,而非upd...
  • TiramisuH
  • TiramisuH
  • 2009-10-16 13:08:00
  • 4861

MySql_插入记录时,存在就更新(或不做任何动作),不存在就添加

今天本码农在批量插入数据的时候,遇到一个问题,由于数据是经常更新的,但是又不想出现冗余数据,所以我希望达到的目的是:插入一条数据的时候,先判断是否存在这条记录,如果存在,我就更新这条记录,不存在就插入...
  • BuptZhengChaoJie
  • BuptZhengChaoJie
  • 2016-03-27 18:37:48
  • 19215

Oracle实现数据不存在则插入,数据存在则更新(insert or update)

思路是写一个函数,先按条件查询数据,如果查询到数据则更新,如果没有查询到数据则插入: create or replace function fn_merge_index(statdate ...
  • jumtre
  • jumtre
  • 2014-09-28 17:29:10
  • 25519

Access提示Insert Into 语法错误解决办法总结

这种错误的可能总结一下和大家一起分享。 1.关键字:如果你的数据库的表的设计包含了Access包含的关键字,则在插入的时候会出现“Insert Into 语法错误” 例如: stri...
  • zisongjia
  • zisongjia
  • 2017-06-06 14:49:18
  • 2221

delphi中操作access 数据库 Insert,Update的一些情况

procedure TFormPatientTemplate.ButtonSaveClick(Sender: TObject); var   FileStream: TFileStream; {t...
  • xt_chaoji
  • xt_chaoji
  • 2011-10-20 17:19:44
  • 1903

关于Access Insert Into 语句的时间插入问题?

Insert Into [News] ([time]) values ("&Now()&")1.time这个字段是ACCESS的保留字,所以要用中括号包含起来.2.在ACCESS里,时间也是个特殊的字...
  • quweiie
  • quweiie
  • 2007-12-15 08:40:00
  • 5233

ACCESS的真假:二、检查记录有无再insert 或 update 比 不管有无直接 delete 再 insert 快吗?

下面这个贴子中讨论了很多ACCESS中的一些猜想假设。Access或其它数据库操作效率问题.欢迎讨论http://topic.csdn.net/u/20090514/10/a93475bd-e67e-...
  • ACMAIN_CHM
  • ACMAIN_CHM
  • 2009-05-23 13:31:00
  • 4598

记录INSERT,UPDATE或DELETE语句

表的数据有变化,想知道是谁执行什么样的SQL语句,可以通过Trigger实现,执行相关SQL的信息可以存放到表里。 首先,建一张Table: CREATE TABLE [dbo].[LOGR]( [...
  • Burgess_Liu
  • Burgess_Liu
  • 2013-08-16 14:26:40
  • 1048

insert和update哪个更执行更快

insert基本只有redo,delete只有undo,而update时要记录undo+redo。 所以当update所有的项时,记录的undo+redo的量与对相应行的delete+inser...
  • wbruce_leew
  • wbruce_leew
  • 2011-09-01 22:26:57
  • 3128
收藏助手
不良信息举报
您举报文章:ACCESS的真假:二、检查记录有无再insert 或 update 比 不管有无直接 delete 再 insert 快吗?
举报原因:
原因补充:

(最多只允许输入30个字)