繼續昨天的問題。我曾經面對乙個工作,要把一張很大的表中,3個月前的資料刪掉,轉儲到歷史表中。這將是乙個很大的工程,需要在一周內完成,而且只能在夜裡進行工作。這就需要考慮到效能問題了,考慮到網上很多人說nologging會很快,我就做個試驗,比較一下效率。
實驗環境:windows7 x64。oracle11g,11.2.0.1.0。歸檔模式,實驗表:test1(create table test1 as select * from dba_objects;)。
實驗步驟:
實驗之前記錄的 redo size:35580568
insert的比較:
insert into test1 (select * from dba_objects);
commit;
直接插入,redo size:49178876 產生的redo size:13598308
nologging插入,redo size:65167892 產生的redo size:15989016
更改表為nologging,記錄當前的redo size:78626484
直接插入,redo size:92136040 產生的redo size:13509556
update的比較
update test1 set object_id = ***x;
commit;
記錄redo size: 107764388
直接更新,redo size:212615144 產生的redo size:104850756
nologging更新,redo size:319452512 產生的redo size:106837368
更改表為nologging,redo size:621576604
直接更新,redo size: 726667444 產生的redo size:105090840
插入資料時更新時間
通常表中會有乙個create date 建立日期的字段,其它資料庫均有預設值的選項。mysql也有預設值timestamp,但在mysql中,不僅是插入就算是修改也會更新timestamp的值!這樣一來,就不是建立日期了,當作更新日期來使用比較好!因此在mysql中要記錄建立日期還得使用dateti...
sqlalchmy 插入資料時自動更新時間
class task basemodel tablename task spiders 表名 nullable 定義各欄位 task num db.column db.integer,autoincrement true primary key true nullable false comment...
MySQL插入 更新資料時,要求不重複
一 插入資料時 當插入資料時,要求資料表的某一列 比如name 不重複,語法如下 insert into table field1,field2,fieldn select field1 field2 fieldn from dual where notexists select field fro...