はじめに
先日の面談からずっとSQLを中心に勉強をしています。
今日勉強したことを自分のアプリケーションに生かしていました。
ただ、効果があるかは微妙です。
ユーザーのマイページを表示させるページへの遷移(コントローラー部分)
before
before
def show
@user = User.find(params[:id])
end
SQL
SELECT `users`.*
FROM `users`
WHERE `users`.`id` = 2
LIMIT 1
usersテーブルの全てのカラムから検索している。
after
after
def show
@user = User.select(:id, :nickname, :first_name, :last_name, :email).find(params[:id])
end
:id, :nickname, :first_name, :last_name, :email
はそのページで表示させるために必要だった情報です。
SQL
SELECT `users`.`id`, `users`.`nickname`, `users`.`first_name`, `users`.`last_name`, `users`.`email`
FROM `users`
WHERE `users`.`id` = 2
LIMIT 1
SQL文がとても長くなったが、エラーは起きず、
beforeと同じ動作はできました。
これだとエラー
error
def show
@user = User.find(params[:id]).select(:id, :nickname, :first_name, :last_name, :email)
end
select
とfind
を入れ替えただけ。
「検索をかけてから、探す」
と
「探してから検索をかける」
では、意味が違うのだろう。
最後に
検証することもできないし、考える必要もないことかもしれないけど、
今回の変更で、多少でも速度や負担に変化はあるのだろうか?塵積も!?
afterの方がSQL文は長いけど、検索しているカラムは最小限だが…
でも、afterの方がコードも長いし…可読性に欠ける?
今回のことは、変化を感じることは少なかったけど、
SQLの勉強にはなりました。