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速度,不同内存,。。。)应该会是相同的相对结果。
- 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() 耗时, 测试结果再一次与猜想背离。
Access软件网QQ交流群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access判断多条明细的配方或订...(11.30)
- 如何让后台数据库在局域网共享时,且...(11.29)
- 【Access月初月末日期设置方法...(11.29)
- 【Access IIF函数嵌套示例...(11.26)
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)