ACCESS的真假:四、"SELECT * INTO 工作表 FROM 臨時表" 比 "
下面這個貼子中討論了很多access中的一些猜想假設(shè)。
access或其它數(shù)據(jù)庫操作效率問題.歡迎討論
http://topic.csdn.net/u/20090514/10/a93475bd-e67e-45c8-aa1e-87168ba36d02.html#replyachor
引用 55 樓 wwwwb 的回復(fù)::
create table是用什么方法?我一般是將空的工作表另存為一個臨時表,
用SELECT * INTO 工作表 FROM 臨時表 方法建立,這種方法比delete from table
還要慢?
這種方法的局限是如果有表間關(guān)系是不能刪除的。
當(dāng)看到這個猜想的時候,感覺比較懷疑。因為 select * into newtable from oldTable,ACCESS需要先從oldTable得到所有字段的定義,然后才能進(jìn)行表的創(chuàng)建。如果猜想成立,就說明access還有一套什么機(jī)制可以直接在底層對表的結(jié)構(gòu)進(jìn)行訪問。但select 可以是任意的查詢,這樣也不太可能啊。 于是,依然做個簡單的試驗來難證一下這個猜想。
新建空 t.mdb ,然后創(chuàng)建一個模塊,代碼如下。
view plaincopy to clipboardprint?
Option Compare Database
Option Explicit
Public Sub ti()
Dim ssql As String
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
ssql = "create table table2(id integer,cname char(10))"
conn.Execute ssql
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 9000
ssql = "drop table t" & (10000 + i)
CurrentProject.Connection.Execute ssql
Next i
On Error GoTo 0
End Sub
Public Sub t1()
Dim ssql As String
Dim i As Integer
For i = 1 To 9000
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 9000
ssql = "select * into t" & (10000 + i) & " from table2"
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
Option Compare Database
Option Explicit
Public Sub ti()
Dim ssql As String
Dim conn As ADODB.Connection
Set conn = CurrentProject.Connection
ssql = "create table table2(id integer,cname char(10))"
conn.Execute ssql
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 9000
ssql = "drop table t" & (10000 + i)
CurrentProject.Connection.Execute ssql
Next i
On Error GoTo 0
End Sub
Public Sub t1()
Dim ssql As String
Dim i As Integer
For i = 1 To 9000
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 9000
ssql = "select * into t" & (10000 + i) & " from table2"
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
步驟一:運(yùn)行 ti()創(chuàng)建一個原表 table2 以供后面的 select * into newtable from oldTable 使用。
步驟二:運(yùn)行 t() 結(jié)果如下。
t1 start. 5/23/2009 3:06:54 PM
t1 end . 5/23/2009 3:07:03 PM
t2 start. 5/23/2009 3:07:17 PM
t2 end . 5/23/2009 3:07:29 PM
t1() 9s , t2() 12s
試驗結(jié)論: 猜想不成立。
(責(zé)任編輯:admin)
- ·sql語句中l(wèi)ike通配符的匯總(*?!#-等含
- ·Access常用sql基本查詢語句匯總
- ·SQL查詢語句的一般格式小結(jié)
- ·聯(lián)合查詢應(yīng)用舉例1
- ·如何取消操作查詢的提示
- ·報表中先按組再按條件統(tǒng)計
- ·測試查詢速度
- ·條件選擇列求和
- ·SQL必知必會(14)NOT操作符
- ·ACCESS的參數(shù)化查詢-Access數(shù)據(jù)庫教程
- ·ACCESS的真假:四、"SELECT * INTO 工
- ·在Access中利用搜索窗體中的值生成動態(tài)
- ·Access使用查詢
- ·隨機(jī)得到Access數(shù)據(jù)庫記錄
- ·SQL 高級使用
- ·交叉表查詢中的累計