diff options
author | Greg Stark <stark@gitlab.com> | 2018-01-06 14:53:16 +0000 |
---|---|---|
committer | Greg Stark <stark@gitlab.com> | 2018-01-06 14:56:05 +0000 |
commit | b230cf8e1f0a76edc97407123574e4c20eb2efa5 (patch) | |
tree | d2df075a57a9b66beb1cddf360adf04820070cb6 | |
parent | fb583c4b1839af16c50e27105a300695aa50bcad (diff) | |
download | gitlab-ce-each-batch-for-batch-size-one.tar.gz |
Special case batch size 1 to avoid doing needless range lookupseach-batch-for-batch-size-one
-rw-r--r-- | app/models/concerns/each_batch.rb | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/app/models/concerns/each_batch.rb b/app/models/concerns/each_batch.rb index 6ddbb8da1a9..b6a106ed883 100644 --- a/app/models/concerns/each_batch.rb +++ b/app/models/concerns/each_batch.rb @@ -62,19 +62,20 @@ module EachBatch .limit(1) .take - relation = where(arel_table[column].gteq(start_id)) - - if stop - stop_id = stop[column] - start_id = stop_id - relation = relation.where(arel_table[column].lt(stop_id)) + if (of == 1) + relation = where(arel_table[column].eq(start_id)) + else if stop + relation = where(arel_table[column].gteq(start_id)).where(arel_table[column].lt(stop[column]) + else + relation = where(arel_table[column].gteq(start_id)) end - + # Any ORDER BYs are useless for this relation and can lead to less # efficient UPDATE queries, hence we get rid of it. yield relation.except(:order), index break unless stop + start_id = stop[column] end end end |