Skip to content

Instantly share code, notes, and snippets.

@paneq
Last active December 11, 2016 13:00
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save paneq/a643b9a3cc694ba3eb6e to your computer and use it in GitHub Desktop.
Save paneq/a643b9a3cc694ba3eb6e to your computer and use it in GitHub Desktop.
cost of using exceptions for control flow compared to one SQL statement (ruby 2.1.4, rails 4.1.7, sqlite) for rails-refactoring.com . Development mode executed in rails console.
require 'benchmark'
ActiveRecord::Base.logger = nil
Benchmark.bmbm do |bench|
bench.report("SQL query") do
1000.times { Whatever.count }
end
bench.report("exception hit") do
1000.times do
begin
raise StandardError.new
rescue
end
end
end
bench.report("exception miss") do
1000.times do
begin
raise StandardError.new if false
rescue
end
end
end
end
Rehearsal --------------------------------------------------
SQL query 0.180000 0.010000 0.190000 ( 0.199253)
exception hit 0.050000 0.000000 0.050000 ( 0.050654)
exception miss 0.000000 0.000000 0.000000 ( 0.000050)
----------------------------------------- total: 0.240000sec
user system total real
SQL query 0.180000 0.010000 0.190000 ( 0.179669)
exception hit 0.050000 0.000000 0.050000 ( 0.048447)
exception miss 0.000000 0.000000 0.000000 ( 0.000054)
@dpneumo
Copy link

dpneumo commented Nov 15, 2016

For me the take home is that when a (SQL) database is involved efforts to optimize the queries has a greater chance of improving app performance than futzing with flow control techniques. Not a surprise but it's nice to have some real numbers to point to. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment