このプロジェクトは、データベースのインデックス最適化によるパフォーマンス改善を実際に体験するための実験環境です。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サイト想定)
# リポジトリをクローン
git clone <repository-url>
cd db-optimization
# Docker環境を起動
docker-compose up -d
# データベースの初期化を待つ(約30秒)# Python依存関係をインストール
pip install -r requirements.txt
# サンプルデータを生成(約10万件)
python generate_sample_data.py# インデックス追加前のパフォーマンステスト
python performance_test.py
# インデックスを追加
mysql -h localhost -u app_user -papp_password ecommerce < 03-add-indexes.sql
# インデックス追加後のパフォーマンステスト
python performance_test_after.py-
商品一覧表示クエリ
- カテゴリ別商品検索
- 価格範囲での絞り込み
- 在庫状況での絞り込み
-
注文履歴クエリ
- ユーザー別注文履歴
- 期間指定での注文検索
-
集計クエリ
- カテゴリ別売上集計
- 月次売上レポート
- クエリ実行時間
- EXPLAIN分析結果
- インデックス使用状況
インデックス追加により、以下の改善が期待されます:
- 商品検索クエリ: 数秒 → 数ミリ秒
- 集計クエリ: 大幅な実行時間短縮
- インデックス使用率: 100%近く
- インデックスの種類と使い分け
- 複合インデックスの設計
- EXPLAIN分析の読み方
- パフォーマンス測定手法
- この実験は学習目的のため、本番環境での使用は推奨しません
- 大量のサンプルデータを生成するため、十分なディスク容量を確保してください
- Dockerコンテナのリソース制限にご注意ください
このプロジェクトは学習目的で作成されています。