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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- document表能負載多少?多少不會影響效率?負載
- MySQL什麼時候會使用內部臨時表?MySql
- NV驅動重灌不會影響CUDA
- 關於在javabean裡的方法,這樣做會不會影響效能JavaBean
- 【折騰】發表文章的時候yaml檔案頭不會被解析YAML
- online 建立index的時候,oracle會等待insert , update的行(假設不超過table的30% ) cIndexOracle
- index有時候可能會比表大!Index
- append HINT 的對事務的影響APP
- vmware tools 有時會影響圖形介面
- Facebook:不會賠償270萬受資料洩露影響的歐洲使用者
- select 表的時候如果別的會話TRUNCATE DROP PURGE表後會是什麼結果會話
- 面試的時候別再說你不會設計模式了面試設計模式
- 對列進行連線操作會影響索引的使用索引
- CSS3實現動畫不會影響主執行緒,JS實現動畫會影響主執行緒CSSS3動畫執行緒JS
- 表的storage (MINEXTENTS 屬性對truncate後表大小的影響
- insert /*+ append */ into 與insert into 的區別APP
- YouGov:44%的美國人不會受企業對LGBTQ的態度影響Go
- 丁磊:那時候我們除了會寫軟體 什麼也不會做
- HTTP會影響網速嗎HTTP
- 使用動態IP會影響網路速度嗎?
- 什麼時候會用到透明加密表空間呢?加密
- 檢視insert,delete,update對基表的影響(檢視初識)delete
- “影響者研究”系列(一):社會網路化時代影響者對營銷創新的影響
- 做restore時用datafilecopy恢復時,影響資料檔案的大小REST
- 修改欄位長度應用會影響到生產效能
- 臨時表的APPEND方式插入APP
- Nginx接收的host值會影響alias的規則匹配Nginx
- MySQL修改表結構到底會不會鎖表?MySql
- Stripe Size大小對讀寫的影響
- 堪薩斯大學:研究發現盜版電影不會給電影行業帶來太大影響行業
- 當你學會炒菜的時候,你就學會了大資料大資料
- 牛津網際網路學院:兒童每天使用螢幕1-2小時不會影響心理健康
- 漫畫 | 新一代軟體架構會影響到誰?架構
- mysqldump備份時使用single-transaction會不會加鎖???MySql
- PHP中高階面試的時候總是會問到這些問題(總結)PHP面試
- 伺服器頻寬不足會不會影響網站速度?教你如何最佳化與判斷伺服器網站
- ResumeGo:LinkedIn如何影響求職者的面試機會Go求職面試
- 突然斷電,是否會影響Mysql的執行結果MySql