Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MySQL5.7の機能で高速化した話

akatsukinewgrad
December 17, 2021
820

 MySQL5.7の機能で高速化した話

akatsukinewgrad

December 17, 2021
Tweet

Transcript

  1. 実際に計測されたデータを確認 11/56 •見るべきポイント • 何が遅いのか • 大体DB関連で遅い • 呼び出されている回数 •

    N+1問題が眠っているかもしれない • 詳しくは弊社の過去のGeek Liveの資料を参照してもらえると分かります
  2. 実際に計測されたデータを確認 12/56 •見るべきポイント • 何が遅いのか • 大体DB関連で遅い • 呼び出されている回数 •

    N+1問題が眠っているかもしれない • 詳しくは弊社の過去のGeek Liveの資料を参照してもらえると分かります ユーザミッションを探すクエリが遅いことが判明
  3. 実装方針の決定 28/56 •複雑なクエリ • 1ミッション1レコード • user_idとmission_idをUNIQUEに id user_id mission_id

    1 123456789 1 2 123456789 2 3 123456789 1 4 123456789 1 id user_id mission_id 2 123456789 2 4 123456789 1
  4. 実装方針の決定 40/56 Generated Column-例 CREATE TABLE triangle ( side_a DOUBLE,

    side_b DOUBLE, # c = √a2 + b2 side_c DOUBLE AS (SQRT(side_a * side_a + side_b *side_b)) );
  5. 実装方針の決定 45/56 VIRTUAL VS STORED VIRUTAL: カラムにアクセスした時に値を計算する STORED : 計算した値を実際に格納しておく

    項目 VIRTUAL STORED アクセス速度 若干劣る 速い CPU消費 大 小 メモリ・ディスク消費 小 大 クラスタ,Rツリー,フルテキ ストインデックス No Yes セカンダリインデックス Yes Yes
  6. 実装方針の決定 47/56 Virtual Generated Column Indexとは Virtual Generated Column →アクセス時に計算しデータを格納しない生成カラム

    Virtual Generated Column Index →唯一許可されている生成カラムを含むインデックスのこと
  7. 実装方針の決定 48/56 Virtual Generated Column Indexとは Virtual Generated Column →アクセス時に計算しデータを格納しない生成カラム

    Virtual Generated Column Index →唯一許可されている生成カラムを含むインデックスのこと ただし,Virtualだと本来は値はselect時に計算されるが, Virtual Generated Column Indexにした場合はindexとして値が格納されていることに注意
  8. 実装方針の決定 50/56 結局どうしたかというと 報酬受取情報 IS NULL AND 達成日時 IS NOT

    NULLを条件にした Virtual Generated Columnを作成 ミッション期間 未挑戦 挑戦中 報酬未受取 報酬受取済み 開催中 終了
  9. 実装方針の決定 51/56 結局どうしたかというと 報酬受取情報 IS NULL AND 達成日時 IS NOT

    NULLを条件にした Virtual Generated Columnを作成 user_idと作成した生成カラムを含む複合インデックスを貼って ミッション期間 未挑戦 挑戦中 報酬未受取 報酬受取済み 開催中 終了
  10. 実装方針の決定 52/56 結局どうしたかというと 報酬受取情報 IS NULL AND 達成日時 IS NOT

    NULLを条件にした Virtual Generated Columnを作成 user_idと作成した生成カラムを含む複合インデックスを貼って 青い四角の部分をindexを使って高速に検索!!! ミッション期間 未挑戦 挑戦中 報酬未受取 報酬受取済み 開催中 終了