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

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

関連記事

(失敗作)愚痴のプラットフォーム アゴニア(αγωνία)

Photo by Alex Iby on Unsplash 今日とりあえず作ってみたけど面白くなかったのを紹介。 コンセプト:  匿名で後ろ向きに愚痴を吐き捨てる場所が欲しい なぜか?: どんどん実名 …

Meisyo+ 正式オープン!

Meisyoのスピンオフ、Meisyo+が正式オープンしました! https://meisyo-plus.net/ コンセプトについては、コンセプトシートをご覧ください。 Meisyoとの差別化内容に …

no image

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

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

[Meisyo] 探索

これは何? 名将と呼ばれた者達の1機能である探索(2020年4月実装)について書いた記事です。 実装目的 1・別目的の追加練習を追加したい  これまでは選手の獲得・育成をメインにした追加練習しかなかっ …

[Meisyo] ver 0.31 リリース情報

名将と呼ばれた者達をver 0.31にアップデートします。 更新概要 1・投手配球設定の追加 2・練習試合マッチング方法の修正 3・課金決済の導入 4・その他 5・アンケート 更新詳細 投手配球設定の …