Bulkifying Apex Trigger refers to the concept of making sure the code properly handles more than one record at a time. When a batch of records initiates Apex, a single instance of that Apex code is executed, but it needs to handle all of the records in that given batch.
For example, a trigger could be invoked by an Force.com SOAP API call that inserted a batch of records. So if a batch of records invokes the same Apex trigger, all of those records need to be processed as a bulk, in order to write scalable code and avoid hitting governor limits.
Here is a simple example of some Apex code both bulkified, and not bulkified.
Not Bulkified:
trigger AccountTriggr on Account (before update) { //This only handles the first record in the Trigger.new collection //But if more than one Account initiated this trigger, those additional records //will not be processed Account acc = Trigger.new[0]; List<Contact> conList = [SELECT Id, FirstName, LastName, Email, Phone FROM Contact WHERE AccountId = :acc.Id]; }
In above apex trigger the issue is that only one Account record is handled because the code explicitly accesses only the first record in the Trigger.new collection by using Trigger.new[0]. Instead, the trigger should properly handle the entire collection of Accounts in the Trigger.new collection.
Bulkified:
trigger AccountTriggr on Account (before update) { //Loop through all records in the Trigger.new collection for(Account a: Trigger.new){ //Write your logic } }
In above bulkified apex trigger the code iterates across the entire Trigger.new collection with a for loop. Now if this trigger is invoked with a single Account or up to 200 Accounts, all records are properly processed.