RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

Web制作 Meisyo SQL

[Meisyo] Viewは不要!SQL処理高速化方法

投稿日:

今回の問題は、対戦成績をデータ分析用に選手対選手で個別に保存していたことから始まります。

選手個人の総合成績をView処理で出力しまいした。
ただ・・・インデックス等がないのでめっちゃ計算時間が掛かるー!

ユーザーを少なく見積もって100ユーザーでも、1ユーザー最低10選手=1000選手持っています。
最大組み合わせ数は、1000選手×999選手=ほぼ100万・・・多すぎる(^^;

そういったものをSQLでSUMすればどうなるか。
そして、試合ごとに全選手を更新する。

もちろん重かった。
悲しかったです。

というわけで、対応策は下記の通りにしました。
・Viewではなく、総合成績の中間テーブルを作るようにしました。
・更新対象を狭め、自分と対戦相手の選手のみとしました。

改良前

個別成績テーブルスキーマ:
選手ID, 対戦選手ID, 試合数…

↓ 試合ごとにSQLでSUM(アクティブなユーザーの全選手)

総合成績Viewスキーマ:
選手ID, 試合数…

各種データ呼び出し

改良後

個別成績テーブルスキーマ:
選手ID, 対戦選手ID, 試合数…

↓ 試合ごとに自分と対戦相手の選手の成績だけ、SQLでSUM

総合成績テーブルスキーマ:
選手ID, 試合数…

各種データ呼び出し

結果

試合の待ち時間5~10秒(またはエラー)が、2秒以内に収まるようになりました。
SQLをテキトーに設定していたのですが、やっぱりちゃんと考えて書かないとダメですね。
いい教訓になりました。

-Web制作, Meisyo, SQL

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

[PHP]「Notice: Undefined variable」および「Notice: Undefined index」

Notice: Undefined variable: disp in C:\xampp\htdocs\mini4matome\link.php on line 17 RSSリーダー(まとめ読み)を作 …

(VPSでつくる) Python仮想環境venvの導入

連載第五回目です。 前回の4. Pythonのバージョンを3.Xにする記事で、Pythonのバージョン管理をディレクトリごとに行えるようになりました。 ただし、アプリごとにモジュールのバージョンは変え …

[Meisyo] 別バージョン「栄光の世代」原案

システムのベースはMeisyoを流用するが、コンセプトが異なる別バージョンを出してみたい。 コンセプト 高校野球監督視点のゲーム 選手の卒業あり(リアル時間3か月を想定)  リアル1か月=ゲーム1年を …

[Meisyo] ゲーム内アイテムの課金での価格設定について

Meisyoではアイテム課金制を採用しています。 ただ、その価格設定理由があいまいだったので記載しておきます。 記載内容 アイテムリストとそれぞれの価格設定理由 (2021年7月現在) 基礎方針 アイ …

no image

ユーザーのフォントを統一できる、Google Fontsの紹介

Web制作で困ることが多いのは「ユーザー全員が使えるフォントがない」ことでしょう。 ユーザーのパソコンに入っているフォントによって見え方が異なるためです。 つまり「見え方が統一できない」ことが多いです …

筆者情報

名将と呼ばれた者達(Meisyo)
高校野球チーム育成シミュレーションゲーム。個性豊かな選手たちを育成し、監督としてチームを優勝に導こう!
Work It!
ソーシャルタイムトラッキングツール。タスクを明確に、進捗をわかりやすく管理します。「タスクを皆でうまく完了させよう」が信条

Twitter(R@おいす)
連絡はこちら

メインサイト:Rの考え方

気に入ったらクリックしてね!