0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【N+1問題】RailsでSQL文が大量発生!

Last updated at Posted at 2021-05-25

どうも、三町哲平です。

Ruby on Railsでアプリ作成もいよいよ大詰め。おおよその機能が完成したところで次に気にするのは、どこでしょうか?
私は、真っ先にユーザビリティ(Webサイトやソフトウェアなどの操作性)をもっと突き詰めたいと思う様になりました。しかもDBのデータを一覧表示するときだけ、処理が遅くない?と思いログを見ていたのですが、
スクリーンショット 2021-01-17 17.22.24.png

なんか青文字がいっぱいじゃないですか!?

色々調べてみるとどうもN+1問題というものが絡んでいそうなので、その辺りを今回はまとめてみました!

Nプラス1問題とは?

データベースからデータを取り出す際に、SQLの発行を必要以上に行ってしまう問題のこと」です。

このSQLの発行が必要以上行われることにより、処理に時間が掛かりページ遷移が遅くなってしまうという現象が起こります。

※__SQL__とは、データベース言語でDBへの更新、追加、削除などを行う事ができます。しかし、Railsの場合だとActiveRecordのおかげで直接データベース言語を書かなくてもDBへの更新、追加、削除などを行う事ができます。

※__ActiveRecord__とは、Ruby on Railsで使用しているO/Rマッパーのことです。

O/Rマッピングとは、オブジェクト指向プログラミング言語におけるオブジェクトとリレーショナルデータベース(RDB)の間でデータ形式の相互変換を行うこと。そのための機能やソフトウェアを「O/Rマッパー」(O/R mapper)という。
引用記事:O/Rマッピング(O/Rマッパー)とは - IT用語辞典 e-Words

オブジェクト関係マッピング - Qiita

用語を理解した上で

N+1問題で頻出する用語が分かった後は、大変分かりやすくまとめられている記事がいくつもございますで、こちらを参考にして解決していきましょう!
私が学習の際に利用したページのリンクを載せます。

動画で理解する

記事で理解する

それでもやっぱり難しい方へ

Railsには、bulletという便利なgemが存在します。
N+1問題が発生している際に下図の様な警告文が出るのでその通りにcontrollerもしくは、viewを修正してやれば解決します。
スクリーンショット 2021-05-25 13.05.30.png

※bulletについての詳しい使用方法は、下記リンクを参考にして下さい。

今回の記事は、短いですが以上です!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?