ガバナ制限処方箋(6):データ操作処理はまとめて実行する

先週に引き続き、複数件のデータをまとめて扱う際のポイントです。
今週はデータ操作をまとめる方法について説明します。

データ操作時に複数件のレコードに対して変更を加えたり、追加したりする場合があります。
Force.comでは、DML(insertやupdateなど)を処理する際の引数としてList/配列を渡すことができます。これによって、1件ずつinsert/updateするのではなく、データをまとめて処理する
ことで発行するDMLを減らすことができます。

以下に、効率の悪いDMLと効率の良いDMLのサンプルソースコードを示します。

効率の悪いDMLのサンプルソースコード
	for(List<Account> accounts : [SELECT id, name FROM Account]) {
for(Account account : accounts) {
// 対象データに対する操作
account.name = account.name + ':test';
update account;
}
}
効率の良いDMLのサンプルソースコード
	for(List<Account> accounts : [SELECT id, name FROM Account]) {
for(Account account : accounts) {
// 対象データに対する操作
account.name = account.name + ':test';
}
update accounts;
}

上記のサンプルソースコードでは、DMLを記述する場所が少しだけ異なるだけです。しかし、ガバナ制限から見ると、ループのどこでDMLを記述するかだけで大きな違いになります。

効率の悪いDMLのサンプルソースコードでは、SOQLで取得したレコード件数分だけDMLを発行します。それに対して、効率の良いDMLのサンプルソースコードでは、SOQL FORループのループ回数分だけDMLを発行することで同じ動作を実現しています。

具体的には、SOQLで
取得するレコード件数が100件であれば、効率の悪いDMLのサンプルソースコードでは100回のDMLを発行するのに対して、効率の良いDMLのサンプルソースコードでは1回のDMLを発行する
だけになります。

通常のRDBMSのSQLに慣れていると、つい効率の悪いDMLのサンプルソースコードの記述方法になってしまいがちです。Force.comに慣れないと無意識に効率の悪い書き方をしてしまいますので、注意が必要です。

「スタッフブログ」へのコメントやご意見等ありましたら、 Facebookページまでお願いします。
twitterでもつぶやいてます。ご興味のある方はぜひフォロー、「いいね!」をお願いします。

(倉谷)

TeamSpiritの最新情報をお届けします

お客様の個人情報の取り扱いについて「プライバシーポリシー」をお読みいただき、
同意いただける場合にのみお申し込みください。

担当者に相談する

導入に関するご質問や
実際の画面操作を見ながらの製品デモまで
お客様のご連絡をお待ちしております

無料トライアル

正式版と同一機能・操作が可能な
無料版TeamSpiritを30日間ご提供しています
まずはTeamSpiritを体験してください