我需要備份表及其數據作爲軟件測試的一部分。確切的表格和它們包含的數據可能會有所不同,所以我無法對DDL或數據進行硬編碼。備份表的名稱與原始表類似,但帶有前綴「QA_」。類似但不相同(除了前綴),僅僅是因爲爲了解決表名的31個字符限制,我必須縮寫一些名稱。哪個更有效率的Oracle SQL? PARALLEL CREATE TABLE AS SELECT或PARALLEL INSERT?
這樣做會更快嗎?使用遊標對象,並通過表循環,從而得到他們的DDL這樣的:
select dbms_metadata.get_ddl(''TABLE'',' || '''' || cursor_rec.object_name || '''' || ') from dual
使用DDL創建備份表,然後填充這些表有:
INSERT /*+ parallel(' || new_table_name || 'DEFAULT) */ INTO ' || new_table_name || ' SELECT * FROM ' || table_name || ''
或做一個簡單的:
CREATE TABLE' || new_table_name 'PARALLEL AS SELECT * from ' || table_name || ''
這兩種方法中哪一種更快?
由於我們沒有您的數據庫,也沒有您的硬件,所以我們無法分辨。你爲什麼不簡單地在**你的**數據庫上運行這兩個版本,並分辨時間? – 2012-01-03 22:05:26
我在理論上講的是哪種方法會更快,因爲我不能在尚不存在的數據和表上運行這些方法。 在衡量使用哪種方法時,我可以預先考慮哪些因素? – 2012-01-03 22:11:54
你總是可以創建一些虛擬表來測試它。使用SQL * Plus'autotrace'功能將告訴你哪個解決方案做了更多的工作。 – 2012-01-03 22:19:22