ACCESS的真假:一、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速度,不同内存,。。。)应该会是相同的相对结果。
- Option Compare Database
- Option Explicit
- Public Sub ti()
- Dim ssql As String
- Dim conn As ADODB.Connection
- Set conn = CurrentProject.Connection
- ssql = "create table table1(id integer,cname char(10))"
- conn.Execute ssql
- Dim i As Integer
- For i = 1 To 10000
- ssql = "insert into table1(id,cname) values(" & i & ",'" & i & "')"
- conn.Execute ssql
- DoEvents
- Next i
- End Sub
- Public Sub tx()
- Dim ssql As String
- Dim conn As ADODB.Connection
- Set conn = CurrentProject.Connection
- Dim i As Integer
- On Error Resume Next
- For i = 1 To 1000
- ssql = "drop table t" & (10000 + i)
- CurrentProject.Connection.Execute ssql
- Next i
- On Error GoTo 0
- For i = 1 To 1000
- ssql = "select * into t" & (10000 + i) & " from table1"
- conn.Execute ssql
- DoEvents
- Next i
- End Sub
- Public Sub t1()
- Dim ssql As String
- Dim i As Integer
- For i = 1 To 1000
- ssql = "drop table t" & (10000 + i)
- CurrentProject.Connection.Execute ssql
- ssql = "create table t" & (10000 + i) & " (id integer,cname char(10))"
- CurrentProject.Connection.Execute ssql
- Next i
- End Sub
- Public Sub t2()
- Dim ssql As String
- Dim i As Integer
- For i = 1 To 1000
- ssql = "delete from t" & (10000 + i)
- CurrentProject.Connection.Execute ssql
- Next i
- End Sub
- Public Sub t()
- Call tx
- Debug.Print "t1 start.", Now
- Call t1
- Debug.Print "t1 end .", Now
- Call tx
- Debug.Print "t2 start.", Now
- Call t2
- Debug.Print "t2 end .", Now
- 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() 耗时, 测试结果再一次与猜想背离。
(责任编辑:admin)
- ·两个未公开的ACCESS方法的使用技巧
- ·如何拆分复制的Access 97数据库
- ·两个未公开的ACCESS方法的使用技巧
- ·用Access 2000有效地组织班级管理
- ·数据在Access与Office组件间自由流动
- ·Access"智库"培训--高效设计 敏捷开
- ·Access查询的基本知识(二)(Office免费
- ·Access设置宏的安全等级
- ·Access查询的基本知识(Office免费公开
- ·四种用代码打开外部Access(MDB)的方法
- ·access操作或事件已被禁用模式阻止的解
- ·简述vba字符串,函数,表达式等基础术
- ·Access VBA 开发公开课讲座
- ·Access设置信任位置
- ·Access应用程序应注意的几个问题
- ·简析能判断Access版本的窗体