質問: item_id; END WHILE; CLOSE cur; END; CALL p1(); ``` このようなプロシージャで`category=1`のデータを`table1`から`table2`に移動させています。 データが1,000行/秒ほどで移動されているのですが、移動対象のデータが5,000万行あります。 できるだけ早くテーブルの移動を行いたいのですがどこを改善すればよろしいでしょうか。
回答: category=1のデータを入れるならwhileせずに一気にやった方が早そうな気がします。(大して効果ないかもしれないけど) x INSERT INTO table2 (SELECT * FROM table1 WHERE table1.item_id = item_id); ○ INSERT INTO table2 (SELECT * FROM table1 WHERE table1.category=1); insertとdeleteどちらが時間かかってるかも気になりますね。 #DELETE FROM table1 WHERE table1.item_id = item_id; をwhile毎にやらずに、CLOSE cur;後に一気にdeleteしてもいいような気がします。 ただ、件数が多いとdeleteは非常に重いので、table1.categoryにパーティションを付けて最後に対象のパーティションをDROPするという事が出来る条件なら試してみてもいいかもしれません。 まあ、whileする必要あるのかな?って。 処理前にauto commitをoff、最後にcommitすれば高速化するかもしれないですがPROCEDUREで試した事はないです。 用途はよくわからないですが、table2にindex付けないとか。