著作一覧 |
Oracle11の話だが、次のようなスクリプトを組んでsqlplusで実行したとする。
やりたいことは、table_aを空っぽにしてから大量にインサートすると、インデックスを張ったままだとばかばかしく時間がかかるので、インサート前に空にして、インデックスも消しておこうということだ。
truncate table_a; drop index table_a_index0; drop index table_a_index1; drop index table_a_index2; insert into table_a select ...; create index table_a_index0 on table_a (colx); create index table_a_index1 on table_a (coly); create index table_a_index2 on table_a (colz);
すると、drop indexが、すべてno wait指定だからビジーでエラーだよ、として弾かれる(ことがある)。
というわけで、truncateをdrop indexより後にしたのだが、sqlplusで何か投げるとすべて同期的な処理(RDBMSとの確定応答方式というか)だと考えていたので、ちょっと意外だった(もっとも、最初にインデックスをドロップしてからトランケートするほうが得な可能性があるから、いずれにしろ、あまり良い順番ではなかったとは言える)。
ジェズイットを見習え |