# 20170828000400_create_users.rb
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :first_name
t.string :last_name
t.string :email_address
t.string :address_line_one
t.string :address_line_two
t.string :address_city
t.string :address_state
t.integer :address_zip
t.timestamps
end
end
end
# 20170828002007_add_indexesto_users.rb
class AddIndexestoUsers < ActiveRecord::Migration[5.1]
def up
execute <<~SQL
ALTER TABLE users
ADD INDEX index_users_on_first_name (first_name),
ADD INDEX index_users_on_last_name (last_name),
ADD INDEX index_users_on_email_address (email_address),
ADD INDEX index_users_on_address_zip (address_zip),
ALGORITHM = INPLACE,
LOCK = NONE
SQL
end
# def change
# change_table :users, bulk: true do |t|
# t.index :first_name, algorithm: :inplace
# t.index :last_name, algorithm: :inplace
# t.index :email_address, algorithm: :inplace
# t.index :address_zip, algorithm: :inplace
# end
# end
# def up
# add_index :users, :first_name
# add_index :users, :last_name
# add_index :users, :email_address
# add_index :users, :address_zip
# end
def down
# raise ActiveRecord::IrreversibleMigration
remove_index :users, :first_name
remove_index :users, :last_name
remove_index :users, :email_address
remove_index :users, :address_zip
end
end
# db/seeds.rb
columns = %w(first_name last_name email_address address_line_one address_line_two address_city address_state address_zip)
count = 1_000_000
slice = 1_000
count.times.each_slice(slice) do |group|
users = []
group.each do |iteration|
users << [].tap do |user|
user << Faker::Name.first_name
user << Faker::Name.last_name
user << Faker::Internet.email
user << Faker::Address.street_address
user << Faker::Address.secondary_address
user << Faker::Address.city
user << Faker::Address.state_abbr
user << Faker::Address.zip_code.to_i
end
end
User.import columns, users
puts "Imported #{group.first + slice} users"
end
# Terminal
rails g model user first_name:string{16} last_name:string email_address:string address_line_one address_line_two address_city address_state:string{2} address_zip:integer
rails db:migrate
rake db:seed
rails g migration AddIndexestoUsers
rails db:migrate
rails db:rollback
rails db:migrate db:rollback
rails db:migrate:down VERSION=20170828002007