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)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)
- 仓库管理实战课程(4)-建表操作(03.22)
- 仓库管理实战课程(3)-需求设计说...(03.19)
- 仓库管理实战课程(2)-软件背景和...(03.18)
- 仓库管理实战课程(1)-讲师介绍(03.16)
- 统计当月之前(不含当月)的记录数怎...(03.11)