Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-表

access的真假:一、DROP删除表再重建比Delete from Table1快吗?

时 间:2009-09-10 09:49:55
作 者:ACMAIN_CHM   ID:3535  城市:无锡
摘 要:DROP删除表再重建比Delete from Table1快?
正 文:

    有时候当我们需要把表中记录全部删除的时候,在很多数据库系统中我们会习惯性选择用truncate table 来实现,truncate table 在很多DBMS中是认为DDL语句,等同于drop table 然后再create table. 速度效率上一般认为远比delete from table高得多。

    虽然Drop table 和 delete 没什么可比性,有些类似于去拿 insert 和 select 比较,本身二者之间没有什么可替代性。 drop+create 只能与 delete from tbl; 功能上相通,并且要求在这个表上没外键参照。在实际系统中也很少会设计出需要delete from tbl没有任何条件的全部删除情景。能想到的只有某些时候会用一些临时表来处理数据,不过既然是临时表,一般是用完就删除了,也不需要用delete from tbl;

    不地仍是对这个观点感觉怀疑,所以做了个测试以求证。

求证: ACCESS中DROP删除表再重建比Delete from Table1快

    不过还是设计了下面的测试方案。表table1中有1万条记录,(如果嫌少可以影响测试结果大家可以自己调整一下试试贴出结果。) 然后复制成1000这样相同的表。分别用drop / create 和delete对比测试。由于在同一机器上做对比测试,所以理论上在其它不同环境下(不同CPU速度,不同内存,。。。)应该会是相同的相对结果。


  1. Option Compare Database   
  2. Option Explicit   
  3.   
  4. Public Sub ti()   
  5.     Dim ssql As String  
  6.     Dim conn As ADODB.Connection   
  7.     Set conn = CurrentProject.Connection   
  8.        
  9.     ssql = "create table table1(id integer,cname char(10))"  
  10.     conn.Execute ssql   
  11.        
  12.     Dim i As Integer  
  13.     For i = 1 To 10000   
  14.         ssql = "insert into table1(id,cname) values(" & i & ",'" & i & "')"  
  15.         conn.Execute ssql   
  16.         DoEvents   
  17.     Next i   
  18.   
  19. End Sub  
  20. Public Sub tx()   
  21.     Dim ssql As String  
  22.     Dim conn As ADODB.Connection   
  23.     Set conn = CurrentProject.Connection   
  24.        
  25.     Dim i As Integer  
  26.     On Error Resume Next  
  27.     For i = 1 To 1000   
  28.         ssql = "drop table t" & (10000 + i)   
  29.         CurrentProject.Connection.Execute ssql   
  30.     Next i   
  31.     On Error GoTo 0   
  32.        
  33.     For i = 1 To 1000   
  34.         ssql = "select * into t" & (10000 + i) & " from table1"  
  35.         conn.Execute ssql   
  36.         DoEvents   
  37.     Next i   
  38.        
  39. End Sub  
  40.   
  41. Public Sub t1()   
  42.     Dim ssql As String  
  43.     Dim i As Integer  
  44.        
  45.     For i = 1 To 1000   
  46.         ssql = "drop table t" & (10000 + i)   
  47.         CurrentProject.Connection.Execute ssql   
  48.         ssql = "create table t" & (10000 + i) & " (id integer,cname char(10))"  
  49.         CurrentProject.Connection.Execute ssql   
  50.     Next i   
  51. End Sub  
  52.   
  53. Public Sub t2()   
  54.     Dim ssql As String  
  55.     Dim i As Integer  
  56.        
  57.     For i = 1 To 1000   
  58.         ssql = "delete from t" & (10000 + i)   
  59.         CurrentProject.Connection.Execute ssql   
  60.     Next i   
  61. End Sub  
  62.   
  63. Public Sub t()   
  64.        
  65.     Call tx   
  66.     Debug.Print "t1 start.", Now   
  67.     Call t1   
  68.     Debug.Print "t1 end  .", Now   
  69.        
  70.        
  71.     Call tx   
  72.     Debug.Print "t2 start.", Now   
  73.     Call t2   
  74.     Debug.Print "t2 end  .", Now   
  75. End Sub  

 

测试结果

t1 start.    5/15/2009 8:03:12 PM
t1 end  .    5/15/2009 8:03:16 PM
t2 start.    5/15/2009 8:03:31 PM
t2 end  .    5/15/2009 8:03:33 PM

测试结论
T2() 耗时 < T1() 耗时, 测试结果再一次与猜想背离。



Access软件网QQ交流群 (群号:483923997)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助