require 'bundler/inline' gemfile do source 'https://rubygems.org' gem 'pg' gem 'mini_sql', path: '../' gem 'activesupport' gem 'activerecord' gem 'activemodel' gem 'memory_profiler' gem 'benchmark-ips' gem 'sequel' gem 'sequel_pg', require: 'sequel' end require 'sequel' require 'active_record' require 'memory_profiler' require 'benchmark/ips' require 'mini_sql' ActiveRecord::Base.establish_connection( :adapter => "postgresql", :database => "test_db" ) DB = Sequel.postgres('test_db') pg = ActiveRecord::Base.connection.raw_connection pg.async_exec < 0 wide_topic_ar n -= 1 end end r.report("wide topic sequel") do |n| while n > 0 wide_topic_sequel n -= 1 end end r.report("wide topic pg") do |n| while n > 0 wide_topic_pg n -= 1 end end r.report("wide topic mini sql") do |n| while n > 0 wide_topic_mini_sql n -= 1 end end r.compare! end Benchmark.ips do |r| r.report("ar select title id") do |n| while n > 0 ar_title_id n -= 1 end end r.report("ar select title id pluck") do |n| while n > 0 ar_title_id_pluck n -= 1 end end r.report("sequel title id select") do |n| while n > 0 sequel_select_title_id n -= 1 end end r.report("sequel title id pluck") do |n| while n > 0 sequel_pluck_title_id n -= 1 end end r.report("pg select title id") do |n| while n > 0 pg_title_id n -= 1 end end r.report("mini_sql select title id") do |n| while n > 0 mini_sql_title_id n -= 1 end end r.compare! end # Calculating ------------------------------------- # ar select title id 144.043 (± 1.4%) i/s - 728.000 in 5.055454s # ar select title id pluck # 712.818 (± 1.5%) i/s - 3.570k in 5.009412s # sequel title id select # 927.011 (± 1.8%) i/s - 4.655k in 5.023228s # sequel title id pluck # 1.183k (± 3.2%) i/s - 5.967k in 5.048635s # pg select title id 1.040k (± 1.4%) i/s - 5.253k in 5.051679s # mini_sql select title id # 1.139k (± 2.5%) i/s - 5.712k in 5.016383s # # Comparison: # sequel title id pluck: 1183.1 i/s # mini_sql select title id: 1139.3 i/s - same-ish: difference falls within error # pg select title id: 1040.1 i/s - 1.14x slower # sequel title id select: 927.0 i/s - 1.28x slower # ar select title id pluck: 712.8 i/s - 1.66x slower # ar select title id: 144.0 i/s - 8.21x slower # # to run deep analysis run # MemoryProfiler.report do # ar # end.pretty_print