DML の仕組み
単一 DML 操作と一括 DML 操作
DML 操作は、単一の sObject で行うことも、sObject のリストで一括で行うこともできます。一括 DML 操作ではガバナ制限 (Apex トランザクションごとのステートメント数を 150 件に制限する DML 制限など) に達することを防止できるため、この操作を実行することをお勧めします。この制限は、Lightning Platform の共有リソースに公正にアクセスできるようにするために設定されています。sObject のリストで DML 操作を実行すると、sObject ごとに 1 つのステートメントとしてカウントされるのではなく、リストのすべての sObject が 1 つの DML ステートメントとしてカウントされます。
次に、単一の sObject で DML コールを実行する非効率な例を示します。
for ループで取引先責任者を 1 つずつ反復処理し、Department 項目が特定の値に一致した場合に Description__c 項目に新しい値を設定しています。リストに 150 を超える品目が含まれる場合、151 回目の update コールは、DML ステートメント制限の 150 を超えるため、キャッチできない例外を返します。
次の例は、ガバナ制限に達しないように前の例を変更したものです。取引先責任者のリストで update をコールして DML 操作を一括処理します。このコードは 1 つの DML ステートメントとしてカウントされるため、150 の制限をはるかに下回ります。
DML 操作に影響する他のガバナ制限は、1 つのトランザクションの DML 操作で処理できる合計行数 (10,000 行) です。同じトランザクションの全 DML コールで処理されるすべての行は、この制限に対して増分的にカウントされます。たとえば、同じトランザクションで 100 人の取引先責任者を挿入して 50 人の取引先責任者を更新すると、DML で処理された合計行数は 150 行となり、残りは 9,850 行になります (10,000 - 150)。
システムコンテキストと共有ルール
ほとんどの DML 操作はシステムコンテキストで実行され、現在のユーザの権限、項目レベルセキュリティ、組織の共有設定、ロール階層内での位置付け、および共有ルールを無視します。詳細は、「共有ルールの適用」 を参照してください。