Skip to content

Commit 44b4125

Browse files
author
Marko Bogdanović
authored
Add more over_select benchmarks (#107)
1 parent 5b100f1 commit 44b4125

21 files changed

+183
-44
lines changed

rails/benchmarks/bm_activerecord_finders_find_by_attributes.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
require 'active_record'
33
require_relative 'support/benchmark_rails'
44

5-
db_setup script: "bm_finders_find_by_attributes_setup.rb"
5+
db_setup script: "bm_finders_setup.rb"
66

77
ActiveRecord::Base.establish_connection(ENV.fetch('DATABASE_URL'))
88
ActiveRecord::Migration.verbose = false
99

1010
class User < ActiveRecord::Base; end
1111

1212
Benchmark.rails("activerecord/#{db_adapter}_finders_find_by_attributes", time: 5) do
13-
user = User.find_by_email('[email protected]')
13+
user = User.select(:name, :email).find_by_email('[email protected]')
1414
str = "name: #{user.name} email: #{user.email}"
1515
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require 'bundler/setup'
2+
require 'active_record'
3+
require_relative 'support/benchmark_rails'
4+
5+
db_setup script: "bm_finders_setup.rb"
6+
7+
ActiveRecord::Base.establish_connection(ENV.fetch('DATABASE_URL'))
8+
ActiveRecord::Migration.verbose = false
9+
10+
class User < ActiveRecord::Base; end
11+
12+
Benchmark.rails("activerecord/#{db_adapter}_finders_find_by_attributes_over_select", time: 5) do
13+
user = User.find_by_email('[email protected]')
14+
str = "name: #{user.name} email: #{user.email}"
15+
end

rails/benchmarks/bm_activerecord_finders_first.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22
require 'active_record'
33
require_relative 'support/benchmark_rails'
44

5-
db_setup script: "bm_finders_first_setup.rb"
5+
db_setup script: "bm_finders_setup.rb"
66

77
ActiveRecord::Base.establish_connection(ENV.fetch('DATABASE_URL'))
88
ActiveRecord::Migration.verbose = false
99

1010
class User < ActiveRecord::Base; end
1111

1212
Benchmark.rails("activerecord/#{db_adapter}_finders_first", time: 5) do
13-
user = User.first
13+
user = User.select(:name, :email).first
1414
str = "name: #{user.name} email: #{user.email}"
1515
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
require 'bundler/setup'
2+
require 'active_record'
3+
require_relative 'support/benchmark_rails'
4+
5+
db_setup script: "bm_finders_setup.rb"
6+
7+
ActiveRecord::Base.establish_connection(ENV.fetch('DATABASE_URL'))
8+
ActiveRecord::Migration.verbose = false
9+
10+
class User < ActiveRecord::Base; end
11+
12+
Benchmark.rails("activerecord/#{db_adapter}_finders_first_over_select", time: 5) do
13+
user = User.first
14+
str = "name: #{user.name} email: #{user.email}"
15+
end

rails/benchmarks/bm_activerecord_scope_all_with_default_scope.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class User < ActiveRecord::Base
1313

1414
Benchmark.rails("activerecord/#{db_adapter}_scope_all_with_default_scope", time: 5) do
1515
str = ""
16-
User.all.each do |user|
16+
User.select(:name, :email).each do |user|
1717
str << "name: #{user.name} email: #{user.email}\n"
1818
end
1919
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require 'bundler/setup'
2+
require 'active_record'
3+
require_relative 'support/benchmark_rails'
4+
5+
db_setup script: "bm_with_default_scope_setup.rb"
6+
7+
ActiveRecord::Base.establish_connection(ENV.fetch('DATABASE_URL'))
8+
ActiveRecord::Migration.verbose = false
9+
10+
class User < ActiveRecord::Base
11+
default_scope { where(admin: true) }
12+
end
13+
14+
Benchmark.rails("activerecord/#{db_adapter}_scope_all_with_default_scope_over_select", time: 5) do
15+
str = ""
16+
User.all.each do |user|
17+
str << "name: #{user.name} email: #{user.email}\n"
18+
end
19+
end

rails/benchmarks/bm_activerecord_scope_where.rb

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class User < ActiveRecord::Base; end
1212
Benchmark.rails("activerecord/#{db_adapter}_scope_where", time: 5) do
1313
str = ""
1414
User
15+
.select(:name, :email)
1516
.where(name: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
1617
.where("email LIKE :email", email: "foobar00%@email.com")
1718
.each { |user| str << "name: #{user.name} email: #{user.email}\n" }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
require 'bundler/setup'
2+
require 'active_record'
3+
require_relative 'support/benchmark_rails'
4+
5+
db_setup script: "bm_scope_where_setup.rb"
6+
7+
ActiveRecord::Base.establish_connection(ENV.fetch('DATABASE_URL'))
8+
ActiveRecord::Migration.verbose = false
9+
10+
class User < ActiveRecord::Base; end
11+
12+
Benchmark.rails("activerecord/#{db_adapter}_scope_where_over_select", time: 5) do
13+
str = ""
14+
User
15+
.where(name: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
16+
.where("email LIKE :email", email: "foobar00%@email.com")
17+
.each { |user| str << "name: #{user.name} email: #{user.email}\n" }
18+
end

sequel/benchmarks/bm_sequel_finders_find_by_attributes.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
require 'sequel'
33
require_relative 'support/benchmark_sequel'
44

5-
db_setup script: "bm_finders_find_by_attributes_setup.rb"
5+
db_setup script: "bm_finders_setup.rb"
66

77
DB = Sequel.connect(ENV.fetch('DATABASE_URL'))
88

99
class User < Sequel::Model; end
1010

1111
Benchmark.sequel("sequel/#{db_adapter}_finders_find_by_attributes", time: 5) do
12-
user = User.find(email: '[email protected]')
12+
user = User.select(:name, :email)[email: '[email protected]']
1313
str = "name: #{user.name} email: #{user.email}"
1414
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require 'bundler/setup'
2+
require 'sequel'
3+
require_relative 'support/benchmark_sequel'
4+
5+
db_setup script: "bm_finders_setup.rb"
6+
7+
DB = Sequel.connect(ENV.fetch('DATABASE_URL'))
8+
9+
class User < Sequel::Model; end
10+
11+
Benchmark.sequel("sequel/#{db_adapter}_finders_find_by_attributes_over_select", time: 5) do
12+
user = User.find(email: '[email protected]')
13+
str = "name: #{user.name} email: #{user.email}"
14+
end

sequel/benchmarks/bm_sequel_finders_first.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22
require 'sequel'
33
require_relative 'support/benchmark_sequel'
44

5-
db_setup script: "bm_finders_first_setup.rb"
5+
db_setup script: "bm_finders_setup.rb"
66

77
DB = Sequel.connect(ENV.fetch('DATABASE_URL'))
88

99
class User < Sequel::Model; end
1010

1111
Benchmark.sequel("sequel/#{db_adapter}_finders_first", time: 5) do
12-
user = User.first
12+
user = User.select(:name, :email).first
1313
str = "name: #{user.name} email: #{user.email}"
1414
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
require 'bundler/setup'
2+
require 'sequel'
3+
require_relative 'support/benchmark_sequel'
4+
5+
db_setup script: "bm_finders_setup.rb"
6+
7+
DB = Sequel.connect(ENV.fetch('DATABASE_URL'))
8+
9+
class User < Sequel::Model; end
10+
11+
Benchmark.sequel("sequel/#{db_adapter}_finders_first_over_select", time: 5) do
12+
user = User.first
13+
str = "name: #{user.name} email: #{user.email}"
14+
end

sequel/benchmarks/bm_sequel_scope_all_with_default_scope.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def only_admins
1818

1919
Benchmark.sequel("sequel/#{db_adapter}_scope_all_with_default_scope", time: 5) do
2020
str = ""
21-
User.all.each do |user|
21+
User.select(:name, :email).each do |user|
2222
str << "name: #{user.name} email: #{user.email}\n"
2323
end
2424
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
require 'bundler/setup'
2+
require 'sequel'
3+
require_relative 'support/benchmark_sequel'
4+
5+
db_setup script: "bm_with_default_scope_setup.rb"
6+
7+
DB = Sequel.connect(ENV.fetch('DATABASE_URL'))
8+
9+
class User < Sequel::Model
10+
dataset_module do
11+
def only_admins
12+
where(:admin => true)
13+
end
14+
end
15+
16+
set_dataset(self.only_admins)
17+
end
18+
19+
Benchmark.sequel("sequel/#{db_adapter}_scope_all_with_default_scope_over_select", time: 5) do
20+
str = ""
21+
User.all.each do |user|
22+
str << "name: #{user.name} email: #{user.email}\n"
23+
end
24+
end

sequel/benchmarks/bm_sequel_scope_where.rb

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ class User < Sequel::Model; end
1111
Benchmark.sequel("sequel/#{db_adapter}_scope_where", time: 5) do
1212
str = ""
1313
User
14+
.select(:name, :email)
1415
.where(name: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
1516
.where(Sequel.lit('email LIKE ?', 'foobar00%@email.com'))
1617
.each { |user| str << "name: #{user.name} email: #{user.email}\n" }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
require 'bundler/setup'
2+
require 'sequel'
3+
require_relative 'support/benchmark_sequel'
4+
5+
db_setup script: "bm_scope_where_setup.rb"
6+
7+
DB = Sequel.connect(ENV.fetch('DATABASE_URL'))
8+
9+
class User < Sequel::Model; end
10+
11+
Benchmark.sequel("sequel/#{db_adapter}_scope_where_over_select", time: 5) do
12+
str = ""
13+
User
14+
.where(name: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
15+
.where(Sequel.lit('email LIKE ?', 'foobar00%@email.com'))
16+
.each { |user| str << "name: #{user.name} email: #{user.email}\n" }
17+
end

support/setup/bm_finders_first_setup.rb

-23
This file was deleted.

support/setup/bm_finders_find_by_attributes_setup.rb renamed to support/setup/bm_finders_setup.rb

+15-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66

77
ActiveRecord::Schema.define do
88
create_table :users, force: true do |t|
9-
t.string :name, :email
9+
t.string :name
10+
t.string :email
11+
t.boolean :approved
12+
t.integer :age
13+
t.datetime :birthday
1014
t.timestamps null: false
1115
end
1216
end
@@ -15,11 +19,19 @@ class User < ActiveRecord::Base; end
1519

1620
attributes = {
1721
name: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
18-
22+
23+
approved: false,
24+
age: 51,
25+
birthday: DateTime.now
1926
}
2027

2128
1000.times do
2229
User.create!(attributes)
2330
end
2431

25-
User.create!(name: 'kir', email: '[email protected]')
32+
User.create!(
33+
name: 'kir',
34+
email: '[email protected]',
35+
approved: true,
36+
birthday: DateTime.now
37+
)

support/setup/bm_scope_all_setup.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
ActiveRecord::Schema.define do
99
create_table :users, force: true do |t|
10-
t.string :name, :email
10+
t.string :name
11+
t.string :email
1112
t.boolean :approved
1213
t.integer :age
1314
t.datetime :birthday

support/setup/bm_scope_where_setup.rb

+9-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@
66

77
ActiveRecord::Schema.define do
88
create_table :users, force: true do |t|
9-
t.string :name, :email
9+
t.string :name
10+
t.string :email
11+
t.boolean :approved
12+
t.integer :age
13+
t.datetime :birthday
1014
t.timestamps null: false
1115
end
1216

@@ -18,6 +22,9 @@ class User < ActiveRecord::Base; end
1822
1000.times do |i|
1923
User.create!({
2024
name: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
21-
email: "foobar#{"%03d" % i}@email.com"
25+
email: "foobar#{"%03d" % i}@email.com",
26+
approved: false,
27+
age: 51,
28+
birthday: DateTime.now
2229
})
2330
end

support/setup/bm_with_default_scope_setup.rb

+9-5
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,23 @@
66

77
ActiveRecord::Schema.define do
88
create_table :users, force: true do |t|
9-
t.string :name, :email
9+
t.string :name
10+
t.string :email
11+
t.boolean :approved
12+
t.integer :age
13+
t.datetime :birthday
1014
t.boolean :admin
1115
t.timestamps null: false
1216
end
1317
end
1418

15-
class User < ActiveRecord::Base
16-
default_scope { where(admin: true) }
17-
end
19+
class User < ActiveRecord::Base; end
1820

1921
attributes = {
2022
name: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
21-
23+
24+
approved: false,
25+
age: 51
2226
}
2327

2428
500.times { User.create!(attributes.merge(admin: true)) }

0 commit comments

Comments
 (0)