insert的時候使用append會不會影響到表的大小
我們在insert表的時候,經常會使用append的方式來提高效率.
append的會將insert的資料直接加到表的最後,而不會在表的空閒塊中插入資料.無論是歸檔模式還是非歸檔模式,append會減少產生的日誌,產生的UNDO也比較少。append屬於direct insert,因此會提高insert的效率.
那麼insert使用append與不使用append,表的大小會不會不同呢?
我簡單做了個試驗:
(1)在沒有做insert之前的表的
select * from dba_segments where tablespace_name='TS_CHARIS';
HEADER_BLOCK BYTES BLOCKS
45835 1342177280 163840
原表資料佔用163840個塊
(2)執行insert(不使用append)
SQL> insert into TEST_PARALLEL (select * from tmp_mid_data);
5000000 rows created.
Elapsed: 00:01:35.97
SQL>
SQL> rollback;
Rollback complete.
Elapsed: 00:04:03.95
SQL>
select * from dba_segments where tablespace_name='TS_CHARIS';
HEADER_BLOCK BYTES BLOCKS
45835 1879048192 229376
可以看到沒有使用append的方式的BLOCKS為229376
(3)恢復資料到原來的資料
SQL> alter table TEST_PARALLEL move;
Table altered.
Elapsed: 00:04:12.97
select * from dba_segments where tablespace_name='TS_CHARIS';
HEADER_BLOCK BYTES BLOCKS
45891 1342177280 163840
恢復原表佔用163840個BLOCKS
(4)執行insert(使用append)
SQL> insert /*+ append */ into TEST_PARALLEL (select * from tmp_mid_data);
5000000 rows created.
Elapsed: 00:01:19.12
SQL> rollback;
Rollback complete.
Elapsed: 00:00:00.05
SQL>
select * from dba_segments where tablespace_name='TS_CHARIS';
HEADER_BLOCK BYTES BLOCKS
45891 1879048192 229376
加append的與不加append的方式,表的佔用空間相同.另外通過兩次rollback的時間比較,前者花費了4分,後者花費了不到1秒,說明不使用append進行insert的話,會佔用undo空間,rollback會進行計算;而使用append則不會佔用太大的空間.
(5)繼續進行試驗(模擬存在碎片的情況)
SQL> alter table TEST_PARALLEL move;
Table altered.
Elapsed: 00:03:30.89
SQL> insert into TEST_PARALLEL (select * from tmp_mid_data);
5000000 rows created.
Elapsed: 00:01:25.86
SQL> rollback;
Rollback complete.
Elapsed: 00:04:09.86
此時的表佔用的空間情況:
select * from dba_segments where tablespace_name='TS_CHARIS';
HEADER_BLOCK BYTES BLOCKS
45891 1879048192 229376
SQL> insert into TEST_PARALLEL (select * from tmp_mid_data where rownum <1000001);
1000000 rows created.
Elapsed: 00:01:04.92
此時的表佔用的空間情況:
HEADER_BLOCK BYTES BLOCKS
45891 1879048192 229376
可以看到,由於表存在碎片,所以這次insert的之後,表的空間沒有再變化(高水位沒有變化).新插入的資料都儲存在空閒的空間之中.
SQL> rollback;
Rollback complete.
Elapsed: 00:00:02.76
SQL>
SQL>
SQL>
SQL> insert /*+ append */ into TEST_PARALLEL (select * from tmp_mid_data where rownum <1000001);
1000000 rows created.
Elapsed: 00:00:30.11
SQL>
SQL> rollback;
Rollback complete.
Elapsed: 00:00:00.03
再看看錶佔用的空間,如果使用append的話,insert會直接從表的高水位開始追加資料.
HEADER_BLOCK BYTES BLOCKS
45891 2013265920 245760
通過實驗可以說明:
1.使用append可以提高insert的效率;
2.使用append很少使用UNDO空間;
3.使用append不會使用表中存在的碎片空間,會直接從表的高水位開始追加資料.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23850820/viewspace-1041319/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- padding會影響到元素的大小,那不想讓它影響到元素的寬度應該怎麼辦?padding
- 總公司投標,會不會受分公司的影響?
- document表能負載多少?多少不會影響效率?負載
- MySQL什麼時候會使用內部臨時表?MySql
- NV驅動重灌不會影響CUDA
- 有的時候我覺得我不會 Markdown
- 面試的時候別再說你不會設計模式了面試設計模式
- Facebook:不會賠償270萬受資料洩露影響的歐洲使用者
- YouGov:44%的美國人不會受企業對LGBTQ的態度影響Go
- 西北大學:研究顯示短時間照射手機光不會影響睡眠
- 虛擬主機不穩定會帶來哪些影響
- 你住在哪裡,可能會影響你與同齡人的表現
- 丁磊:那時候我們除了會寫軟體 什麼也不會做
- Drexel大學:研究顯示金錢會影響氣候變化立法
- 在After Insert觸發器中使用INSERT後,影響SCOPE_IDENTITY 問題觸發器IDE
- 使用動態IP會影響網路速度嗎?
- CSS3實現動畫不會影響主執行緒,JS實現動畫會影響主執行緒CSSS3動畫執行緒JS
- HTTP會影響網速嗎HTTP
- 骨傳導耳機不會影響聽力,是真的咩?
- 供應鏈的管理趨勢會影響企業社會責任
- mac 使用 torchvision 的時候,會警告 image.so \ libc10.dylibMac
- 身份驗證會影響使用者體驗嗎?
- 對孩子成功的機會影響最大的是什麼?
- MySQL修改表結構到底會不會鎖表?MySql
- 在不影響程式使用的情況下新增shellcode
- 戴時不會感覺到的32克智慧手錶:Polar Unite
- 漫畫 | 新一代軟體架構會影響到誰?架構
- 深入探討!Batch 大小對訓練的影響BAT
- ResumeGo:LinkedIn如何影響求職者的面試機會Go求職面試
- ICT是什麼?ICT的社會和經濟影響
- 小心在 Blade 模板裡的大量 include 將會影響效能
- 突然斷電,是否會影響Mysql的執行結果MySql
- 持續交付會如何影響測試
- 伺服器頻寬不足會不會影響網站速度?教你如何最佳化與判斷伺服器網站
- PHP中高階面試的時候總是會問到這些問題(總結)PHP面試
- /etc/hosts.deny會被誰呼叫,又會影響誰呢?
- mysql的新建索引會導致insert被lockedMySql索引
- Match:Facebook約會服務對Match付費會員的增長毫無影響
- 設計模式總是學不會?是時候換個姿勢了設計模式