スポンサーリンク
IT全般

📝 MotionBoard × Dr.Sum の高速化:UNION の限界と単一テーブル化の効果

IT全般
この記事は約5分で読めます。

🚀 MotionBoard が重い…そんな悩みから始まった

MotionBoard で大量データを扱うと、 「画面が重い」「表示に時間がかかる」 といった問題に直面することがあります。

私の環境でもまさに同じ状況でした。

  • データ件数:約 1,000万件
  • 項目数:約 70項目
  • 期間:2010〜2025年(15年分)
  • データソース:Dr.Sum

この規模になると、データの持ち方次第でパフォーマンスが大きく変わります。

❌ UNION の限界:大量データでは致命的に遅い

当初は、年別に分割された複数テーブルを UNION でまとめて MotionBoard に渡していました。

しかし、この UNION が本当に遅い。

  • 全テーブルを読み込む
  • 結合
  • ソート(重複排除)
  • MotionBoard が毎回クエリを投げる

データ量が増えるほど処理が重くなり、 画面表示に数分かかるようになりました。

結論:UNION は大量データでは致命的に遅い。

✔ 単一テーブル化の効果:爆速になった

そこで私は思い切って、

👉 夜間バッチで全データを1つのテーブルに統合し、MotionBoard は単一テーブルを直接参照する方式に変更

これが大正解でした。

Dr.Sum は 単一テーブルの高速検索に最適化されたエンジンなので、

  • インデックスが効く
  • WHERE 条件が素直に効く
  • キャッシュも効きやすい
  • MotionBoard のフィルタがそのまま最適化される

結果として、画面表示が 体感で“爆速” になりました。

UNION 時代:数分 → 単一テーブル化後:3秒未満

本当に世界が変わりました。

🧮 集計処理は極力バッチで行い、View ではなくテーブルを直接参照させる

✔ 集計や加工は極力バッチで前処理

MotionBoard や View に負荷をかけず、 必要な形に整えたデータをテーブルとして用意することで、 Dr.Sum の検索性能を最大限に活かせます。

✔ View 経由ではなく、テーブルを直接参照

View は便利ですが、

  • 複雑な計算
  • JOIN
  • UNION などが含まれると、MotionBoard のレスポンスが一気に悪化します。

Dr.Sum は“テーブル直参照”が最速。

そのため、 「View で頑張る」のではなく 「バッチで作ったテーブルを直接参照させる」 という設計が圧倒的に有利です。

🧭 ただし、単一テーブル化できない環境もある

私の環境では夜間バッチが組めましたが、 すべての現場で同じ方法が取れるわけではありません。

例えば、

  • バッチ処理の時間が確保できない
  • 運用ルール上、統合テーブルを作れない
  • データ更新がリアルタイムで頻繁
  • 年別テーブルの構造が変わる可能性がある

こういったケースでは、 単一テーブル化という最適解が選べないことがあります。

📌 そんなときの“次善策”として使えるのがマルチビュー

単一テーブル化ができるなら、それが最速です。でも、どうしても難しい環境もあります。
そんなときにマルチビューを使うことも可能です。

🧩 マルチビューとは?

🎯 複数テーブルを“1つのテーブルのように扱える”Dr.Sum の仕組み

例えば、こんな年別テーブルがあるとします。

  • 売上_2010
  • 売上_2011
  • 売上_2012
  • 売上_2025

これらをマルチビューで束ねると、MotionBoard からは 「売上」という1つのテーブルとして扱えるようになります。

⚡ マルチビューのメリット(次善策としては優秀)

  • UNION より圧倒的に速い
  • 必要なテーブルだけ参照する(パーティション的動作)
  • MotionBoard からは1テーブルとして扱える

ただし、単一テーブル化には及びません。

🆚 単一テーブル参照 vs マルチビュー

どちらが速いのか?

結論は明確です。

🥇 最速:単一テーブル参照

  • Dr.Sum の性能を最大限引き出せる
  • 今回の私の環境はこれで爆速化
  • UNION のボトルネックを完全に排除できる
  • View を使わずテーブル直参照が最強

🥈 次善策:マルチビュー

  • 単一テーブル化できない場合の選択肢
  • UNION よりは圧倒的にマシ
  • 年別テーブル運用をそのまま活かせる

🔧 さらに高速化するために行ったこと

  • 日付列にインデックスを付与
  • ID系(顧客ID・商品ID)にもインデックス
  • MotionBoard の初期表示を「直近1年」に設定
  • データソースで不要な列を除外
  • キャッシュを有効化

これらを組み合わせることで、さらに高速化できます。

🎯 まとめ:一番伝えたいこと

🔥 1. UNION は大量データでは本当に遅い(致命的)

🔥 2. 単一テーブルに統合したら爆速になった(世界が変わる)

🔥 3. 集計は極力バッチで行い、View ではなくテーブル直参照が最速

🔥 4. 単一テーブル化できない場合は、マルチビューを“次善策”として検討

MotionBoard × Dr.Sum のパフォーマンスは、 データ構造と設計次第で劇的に変わります。

同じように悩んでいる人の参考になれば幸いです。

コメント

タイトルとURLをコピーしました