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

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

関連記事

[Meisyo+] 9/1~9/30 オープンβテスト実施中

こんばんは。 新ゲームタイトル Meisyo+(仮)の開発決定・ゲームコンセプトについてで開発を進めていたMeisyo+について、9/1にβ版をリリースしました。 名将と呼ばれた者達+ コンセプトシー …

[Meisyo]パラメータバランス調整 ver 0.10(a)

パラメータバランスを調整します。 理由としては、ミートが強すぎるからです。 ミートが神の地位を手に入れて早・・・というより、Meisyoが最初からそうだった。 「ミートを上げれば即ち打てる」で、パワー …

(VPSでつくる) Pythonのバージョンを2.7.5から3.6.8にする

連載第四回目です。 CentOS7にインストールされているPythonのバージョンが2.7なので、バージョンアップをします。 そうしないとPythonのアプリが動きません。 なぜなら、Python2と …

[Python:Predict Gollira]2枚の画像でどちらがゴリラっぽいかを人間が予想する。

「あーこの人ゴリラっぽい。」と思うことはありませんか? ゴリラっぽさってどこから来るんだろうかと悩んでいました。 前回、[Python] ディープラーニングのモデル「VGG16」を使って画像認識をし、 …

(VPSでつくる) phpMyAdminインストール

連載第九回目です。 GUI上でMariaDB(MySQL)を触れるようにするために、phpMyAdminをインストールしましょう。 この記事は、VPSで作るPythonでのWebアプリ運用環境の連載記 …