會員登錄 - 用戶注冊 - 網(wǎng)站地圖 Office中國(office-cn.net),專業(yè)Office論壇
當(dāng)前位置:主頁 > 技巧 > Access技巧 > 查詢視圖 > 正文

ACCESS的真假:四、"SELECT * INTO 工作表 FROM 臨時表" 比 "

時間:2009-09-14 08:34 來源:http://blog.csdn.net 作者:ACMAIN_C… 閱讀:
正 文:

下面這個貼子中討論了很多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)

頂一下
(0)
0%
踩一下
(0)
0%
發(fā)表評論
請自覺遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動的言論。
評價: