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

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

関連記事

[Python] 機械学習での変数選択自動化(SVRを例に)

今回、会社のコンペで255というとんでもない量の変数を扱うことになりました。 価格予想を行うコンペです。 今回のデータのおさらい データ量は1500程度。8:2で分けると検証データが300しかないすご …

[Meisyo+] 新機能(リーグ戦)を試すとアイデアが出る

Meisyo+の機能、いろいろと案はあるもののテストもせずとりあえず作っています。 私事ですが、入社してすぐですが仕事は面白くなりそうでよかったです。まだまだ研修中です。 ある程度正確な指標予測モデル …

[Meisyo] アップデート方針2020.06

いろいろと更新していましたが、こちらに記載を忘れていました。 今後のアップデート方針を記載します。 今後の方針 1・新規向け:新規登録後の継続者を増やす  1・データ分析   基盤ができているので、ま …

(VPSでつくる) Nginx+PHPでHello World

連載第七回目です。 今回はGUIでデータベースを操作できるphpMyAdminのインストール準備のために、PHPという言語をインストールします。 この記事は、VPSで作るPythonでのWebアプリ運 …

【Meisyo】ステータスバランス調整

はじめに Meisyo+ お知らせ ステータスバランス調整予定のお知らせの詳細を記載します。 下記の順番で対処を行いました。 ②本塁打率が高すぎる。 ①打率平均が低すぎる。 ③長打(二塁打・三塁打)が …