Skip to content

koarakko5555/db-optimization

Repository files navigation

データベース最適化実験プロジェクト

概要

このプロジェクトは、データベースのインデックス最適化によるパフォーマンス改善を実際に体験するための実験環境です。ECサイトを想定したテーブル構成で、インデックス追加前後のクエリ実行時間を比較し、データベースチューニングの効果を検証します。

プロジェクト構成

db-optimization/
├── docker-compose.yml          # MySQL環境構築用
├── init/                       # データベース初期化スクリプト
│   ├── 01-create-tables.sql    # テーブル作成
│   └── 02-performance-setup.sql # パフォーマンス設定
├── 03-add-indexes.sql          # インデックス追加スクリプト
├── generate_sample_data.py     # サンプルデータ生成
├── performance_test.py         # パフォーマンステスト(インデックス前)
├── performance_test_after.py   # パフォーマンステスト(インデックス後)
├── explain_analysis.py         # EXPLAIN分析ツール
├── verify_data.py              # データ検証ツール
├── requirements.txt            # Python依存関係
└── zenn_article.md             # 詳細な実験レポート

実験環境

  • データベース: MySQL 8.0
  • コンテナ: Docker Compose
  • データ量: 約10万件のサンプルデータ
  • テーブル構成: categories, products, orders(ECサイト想定)

セットアップ手順

1. 環境構築

# リポジトリをクローン
git clone <repository-url>
cd db-optimization

# Docker環境を起動
docker-compose up -d

# データベースの初期化を待つ(約30秒)

2. サンプルデータの生成

# Python依存関係をインストール
pip install -r requirements.txt

# サンプルデータを生成(約10万件)
python generate_sample_data.py

3. パフォーマンステストの実行

# インデックス追加前のパフォーマンステスト
python performance_test.py

# インデックスを追加
mysql -h localhost -u app_user -papp_password ecommerce < 03-add-indexes.sql

# インデックス追加後のパフォーマンステスト
python performance_test_after.py

実験内容

テスト対象クエリ

  1. 商品一覧表示クエリ

    • カテゴリ別商品検索
    • 価格範囲での絞り込み
    • 在庫状況での絞り込み
  2. 注文履歴クエリ

    • ユーザー別注文履歴
    • 期間指定での注文検索
  3. 集計クエリ

    • カテゴリ別売上集計
    • 月次売上レポート

測定指標

  • クエリ実行時間
  • EXPLAIN分析結果
  • インデックス使用状況

期待される結果

インデックス追加により、以下の改善が期待されます:

  • 商品検索クエリ: 数秒 → 数ミリ秒
  • 集計クエリ: 大幅な実行時間短縮
  • インデックス使用率: 100%近く

技術的な学習ポイント

  • インデックスの種類と使い分け
  • 複合インデックスの設計
  • EXPLAIN分析の読み方
  • パフォーマンス測定手法

注意事項

  • この実験は学習目的のため、本番環境での使用は推奨しません
  • 大量のサンプルデータを生成するため、十分なディスク容量を確保してください
  • Dockerコンテナのリソース制限にご注意ください

ライセンス

このプロジェクトは学習目的で作成されています。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages