Use better logic.
For example, if you want to run Account Assignment based on account name, you can create multiple batches so that the first batch starts with names starting with the letter C through K, and the second batch starts with the names starting with the letter L. Optionally, additional batches may be created starting with later letters.
Consider the following logic for the object
WHERE NAME > 'B' AND NAME < 'L'
WHERE clause causes the database to retrieve account records with names starting with the letter C through K, the clause specifies that if accounts starting with the letter M through Z are encountered, they are passed on the first round because the values are greater than B. However, in the second round, these records are then eliminated by the database as unneeded, because there is a cap of account names less than L.
It is better logic to use this object
WHERE clause instead:
WHERE NAME < 'L' AND NAME > 'B'
By switching the order of the conditions, the extra parsing required by the database in the second round is eliminated because most of the names start with a letter greater than B.