ACCESS的真假:一、DROP刪除表再重建比Delete from Table1快嗎?

來源:互聯網
上載者:User

有時候當我們需要把表中記錄全部刪除的時候,在很多資料庫系統中我們會習慣性選擇用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<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 table1(id integer,cname char(10))"<br /> conn.Execute ssql</p><p> Dim i As Integer<br /> For i = 1 To 10000<br /> ssql = "insert into table1(id,cname) values(" & i & ",'" & i & "')"<br /> conn.Execute ssql<br /> DoEvents<br /> Next i</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 1000<br /> ssql = "drop table t" & (10000 + i)<br /> CurrentProject.Connection.Execute ssql<br /> Next i<br /> On Error GoTo 0</p><p> For i = 1 To 1000<br /> ssql = "select * into t" & (10000 + i) & " from table1"<br /> conn.Execute ssql<br /> DoEvents<br /> Next i</p><p>End Sub</p><p>Public Sub t1()<br /> Dim ssql As String<br /> Dim i As Integer</p><p> For i = 1 To 1000<br /> ssql = "drop table t" & (10000 + i)<br /> CurrentProject.Connection.Execute ssql<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 1000<br /> ssql = "delete from t" & (10000 + i)<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<br />

 

測試結果

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() 耗時, 測試結果再一次與猜想背離。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.