下面這個貼子中討論了很多ACCESS中的一些猜想假設。
Access或其它資料庫操作效率問題.歡迎討論
http://topic.csdn.net/u/20090514/10/a93475bd-e67e-45c8-aa1e-87168ba36d02.html#replyachor
引用 55 樓 wwwwb 的回複::
create table是用什麼方法?我一般是將空的工作表另存新檔一個暫存資料表,
用SELECT * INTO 工作表 FROM 暫存資料表 方法建立,這種方法比delete from table
還要慢?
這種方法的局限是如果有表間關係是不能刪除的。
當看到這個猜想的時候,感覺比較懷疑。因為 select * into newtable from oldTable,ACCESS需要先從oldTable得到所有欄位的定義,然後才能進行表的建立。如果猜想成立,就說明ACCESS還有一套什麼機制可以直接在底層對錶的結構進行訪問。但select 可以是任意的查詢,這樣也不太可能啊。 於是,依然做個簡單的實驗來難證一下這個猜想。
建立空 t.mdb ,然後建立一個模組,代碼如下。
Option Compare Database<br />Option Explicit</p><p>Public Sub ti()<br /> Dim ssql As String<br /> Dim conn As ADODB.Connection<br /> Set conn = CurrentProject.Connection</p><p> ssql = "create table table2(id integer,cname char(10))"<br /> conn.Execute ssql</p><p>End Sub<br />Public Sub tx()<br /> Dim ssql As String<br /> Dim conn As ADODB.Connection<br /> Set conn = CurrentProject.Connection</p><p> Dim i As Integer<br /> On Error Resume Next<br /> For i = 1 To 9000<br /> ssql = "drop table t" & (10000 + i)<br /> CurrentProject.Connection.Execute ssql<br /> Next i<br /> On Error GoTo 0<br />End Sub</p><p>Public Sub t1()<br /> Dim ssql As String<br /> Dim i As Integer</p><p> For i = 1 To 9000<br /> ssql = "create table t" & (10000 + i) & " (id integer,cname char(10))"<br /> CurrentProject.Connection.Execute ssql<br /> Next i<br />End Sub</p><p>Public Sub t2()<br /> Dim ssql As String<br /> Dim i As Integer</p><p> For i = 1 To 9000<br /> ssql = "select * into t" & (10000 + i) & " from table2"<br /> CurrentProject.Connection.Execute ssql<br /> Next i<br />End Sub</p><p>Public Sub t()</p><p> Call tx<br /> Debug.Print "t1 start.", Now<br /> Call t1<br /> Debug.Print "t1 end .", Now</p><p> Call tx<br /> Debug.Print "t2 start.", Now<br /> Call t2<br /> Debug.Print "t2 end .", Now<br />End Sub</p><p>
步驟一:運行 ti()建立一個原表 table2 以供後面的 select * into newtable from oldTable 使用。
步驟二:運行 t() 結果如下。
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
實驗結論: 猜想不成立。