RのWeb制作

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

SQL Web制作 Meisyo

[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をテキトーに設定していたのですが、やっぱりちゃんと考えて書かないとダメですね。
いい教訓になりました。

-SQL, Web制作, Meisyo

執筆者:


comment

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

関連記事

no image

[PHP]まとめ読みをPSRで改良する(3)

(2)の記事から「PDO」を使い、データの通信をオブジェクト化しました。 password_hashを使い、パスワード処理の暗号化も行いました。 PDOを導入する一番の理由は「mysql_query」 …

[Meisyo] 最近のアップデートの総括

最近のアップデートで失敗したかなと思ったもの 特訓 結構多くの人が使うと思って追加した。 けれども、蓋を開けてみると日で1~2割くらいの方しか使ってもらえていない。 選択肢がないより良いが、選手をある …

[Meisyo+] リアルな試合処理への変更

Meisyo+でアンケートを行っています。 そのご意見をいただいた中で、よりリアルな試合進行にするために試合処理を変更しました。 どんな感じになったの? 得点が決勝点になりえる時(例:10回裏同点、1 …

特訓の追加について

練習に特訓を追加しました。 特訓の実装目的は、 1. 選手発掘の迅速化 2. 特定の選手の育成 です。 meisyoはステータスが絶対的ではないので、(なんとなく)良い選手を発掘することが重要です。 …

[Meisyo]試合一球分析用DBの追加

試合で一球ごとの分析用DBを追加しました。 なぜかというと、試合での投手vs打者における投球と打撃結果の因果関係が分からなかったからです。 もっとカンタンニシテ・・・ 例えば・・・ どのコースは打たれ …