2015-01-07 313 views
1

我最近被指定使用Teradata進行項目。 我被告知要嚴格使用DROP + CREATE而不是DELETE ALL,因爲後者「會留下一些空間」。這對我來說是違反直覺的,我認爲這可能是錯誤的。我在網上搜索了兩種方法之間的比較,但我什麼也沒找到。 這隻會強化我的觀點,即DELETE ALL不會遇到上述問題。然而,如果是這種情況,我必須證明它(實際上和理論上都是如此)。Teradata全部刪除與刪除+創建

所以,我的問題是:這兩種方法之間的空間分配是否存在差異?如果不是,是否有證明它的正式文件(用戶指南,技術規範,其他)?

謝謝!

+0

是否有可能在DBC.DiskSpace中報告的空間是表頭?如果您在不填充新表的情況下執行DROP和CREATE,則該空間將存在。 –

回答

1

這裏有一個討論:http://teradataforum.com/teradata/20120403_105705.htm關於同一主題(雖然它並沒有真正回答「留下一些空間分配部分」部分)。他們實際上建議DELETE ALL但對於其他(性能)的原因:

我還要舉以防萬一鏈接去死:

「全部刪除」會更快,雖然是實際存在往往是不他們的表現有很大的不同。

但是,特別是對於定期運行的進程(比如每日批處理),我建議使用「全部刪除」方法。這樣可以減少工作量,因爲它只會刪除數據並保留定義。請記住,如果刪除了定義,則需要訪問多個字典表,當然,當您重新創建對象時,您必須訪問那些相同的表(通常)。

除了性能方面,drop/create方法的缺點是每次創建對象時Teradata都會將「默認行」插入到AccessRights表中,即使通過角色安全性控制對對象的後續訪問並且/或數據庫級別的安全性。正如你可能知道AccessRights表格可能很容易變得很大而且很扭曲。根據我的經驗,許多網站都有一個定期清理這個表的過程,刪除多餘的行。如果您的(通常爲批處理)進程定期刪除/創建對象,那麼您只需向表中添加行,這些行先前已通過清理流程刪除,並且未來將由同一流程刪除。這聽起來像是對我完全浪費時間。

1

你的印象是正確的,你沒有發現任何提及「DELETE分配留下一些空間,」在任何地方,因爲它是完全錯誤的:-)

全部刪除類似於其他一個TRUNCATE DBMS和在大多數情況下使用fastpath處理: