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

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

関連記事

[Meisyo]ビッグデータから学ぶ試合の基礎設計4

ここでは、「どのパラメータが打率等にどれくらい関係するのか」を理解することで強いチームを作る指針を記載しておきます。 機械学習(重回帰分析)を使って本気で遊んでます。 実際のデータセットはこちら 野手 …

(VPSでつくる) VPSへのログイン

連載第一回目です。 まずは、さくらVPSへログインしたいと思います。 ログインすることによって、VPSサーバーの設定ができるようになります。 連載の全体を俯瞰してみると、赤枠の部分です。 あなたのPC …

[Meisyo]スマホ対応の進行と新要素の追加準備

名将と呼ばれた者達更新情報です! 現在、下記内容を進めています。 ・スマホ対応 ・選手強化方法の追加(強化合成) ・ミニゲームの追加 ・スマホアプリ作成 スマホ対応の進行 スマホプレイを快適にできるよ …

no image

PHPのコーディング規則、PSRを学ぶ(4)

PHPのコーディング規則、PSRを学ぶ(3)の続きです。 今回は実際にクラス名定義を自宅サーバーで試してみます。 1.「SplClassLoader.php」を手に入れる 「ダウンロード」または「直接 …

[Kaggle] Titanic 約80% by ランダムフォレスト

実力不足感が否めませんが、Kaggleのチュートリアル的なTitanicにおいてランダムフォレストで正答率約80%を出せたのでコードを載せておきます。 Colaboratory 実施期間:2019/0 …