2013-10-10 51 views
1

我懷疑是否可以在我的應用程序中使用外部表(Oracle),而不實際在數據庫中創建實際表。我打算做的是我有一個.txt(大約25 GB)的文件,我想直接在我的.txt文件上運行SQL查詢,而無需在實際的數據庫表中創建和加載數據。所以,我的問題是這是否可能,如果是的話,那麼這樣做的缺點和好處是什麼。任何幫助,高度讚賞。可以將外部表用作普通數據庫表(Oracle)

回答

3

這是可能的,但外部表的主要缺點是你不能在這樣的表上創建任何索引,所以選擇數據可能會很慢。 閱讀this

+0

相當緩慢是一個非常大的輕描淡寫。訪問25GB的.txt是...瘋狂 – Najzero

+0

@Mikhail感謝您的意見,根據我的要求,我不會創建索引,並且表中的內容也需要刪除並經常加載新數據。所以,我想保存數據加載時間,那麼使用外部表還是一個好方法嗎?你能分享一下,它是如何與代碼語法訪問常規數據庫表不同的。 – user2002522

+0

@ user2002522在任何地方查詢外部表時,Therw在查詢語法上都沒有區別。唯一的區別是在CREATE TABLE語句中。我認爲,您應該只測試兩種情況:將數據加載到常規表中並查詢它所用的時間以及查詢外部表所需的時間。而且,考慮到您收到的時間,請決定加載數據還是按照原樣查詢。 – Mikhail

2

您可以應用並行查詢,但當然不能創建索引或修改數據,或者收集一整套統計數據(您可以使用DBMS_STATS.GATHER_TABLE_STATS收集一些統計數據,這可能有助於Oracle確定最佳連接策略)。

如果文件在邏輯上被拆分成多個文件,以便您可以告訴1月份的數據位於特定的文件中,那麼您當然可以擁有多個外部表格,並且可能有一些幻想來仿效分區視圖,但它可能是疼痛。

真的你應該加載數據。如果性能是一個問題,那麼使用表中已經定義了索引的直接路徑nologging加載 - 如果介質出現故障,您仍然可以重新加載數據,以便日誌記錄是可選的。

相關問題