Laravelで始める DBパフォーマンス入門


安西先生…!! アプリケーションを速くしたいです……


DBのパフォーマンスを調整してみよう


まずはIndexを付与してみよう


Q1. DBにおけるIndexとは?


A1. データベースの性能を向上させる方法の一つ


構成要素

「探すレコードを識別するデータの項目」
「対象レコードの格納位置を示すポインタ」

つまり

格納位置を特定し、その位置を直接アクセスする事で、検索速度をあげられる。


なので

インデックスが設定されていない場合の検索では、テーブルの最初から順番に1件ずつ探すため、時間がかかります。

参考
https://www.atmarkit.co.jp/ait/articles/1703/01/news199.html


早速実践してみた。


tyamahori.com で実践する


インストールするもの


導入直後のキャプチャ


ポイントはQueries

  • ここを見れば発行されているクエリーが確認できる。
  • それをデバッグしてクエリーを最適化する

対応前キャプチャ


無駄にクエリが吐かれているので直す


コードを修正したらがっつり減った

まずはSQLの発行は減らせた!


次はSQLのデバック


EXPLAINを使う

乱暴にいうと、SQLがどのように実行されるかを教えてくれるコマンド

sample.sql
explain select * from `posts` where `published` = 1 and `posts`.`deleted_at` is null order by `created_at` 
desc

EXPLAINを叩いた結果wwwwwww

  • typeがALLになっていたらダメ
  • フルスキャンがかかりパフォーマンスが悪い


ガバガバ実装で草が生えた


とりあえずカラムにindexをつける。


と思ったけど、うまくindexが効かず挫折。。。

色々と調査はしているけど。。わからず。。


データが少なく、indexがつかない。。?

確固たる原因は分からず。。


おしまい