sql-database-assistant について
データベース開発チーム向けの SQL スキルです。クエリ性能の分析、DDL からのスキーマ文書作成、スキーマ差分に基づく移行 SQL の生成を行います。タスク、入力内容、データベース方言を確認してから処理します。
主な機能
- 01一般的な SQL 性能問題の検出
- 02DDL からのスキーマ文書生成
- 03スキーマ比較と移行 SQL 生成
- 04JSON と Markdown の出力
活用シーン
- 01遅いクエリの原因候補の調査
- 02プロジェクト用スキーマ文書の作成
- 03目標スキーマ向け移行 SQL の作成
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ borghei/ claude-skills --skill sql-database-assistantインストール後、Claude Code で/sql-database-assistantを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
examples/queries.sqlschema.sqlreferences/sql-optimization.mdscripts/migration_generator.pyquery_optimizer.pyschema_explorer.py詳細
SQL データベースアシスタント
カテゴリ: エンジニアリング 分野: データベース開発と最適化
概要
SQL データベースアシスタントスキルは、SQL クエリのパフォーマンス分析、DDL ファイルからのデータベーススキーマの調査、スキーマの差分からのマイグレーション SQL の生成に役立つツールを提供します。チームが効率的なクエリを作成し、整理されたスキーマを維持し、安全にデータベースを進化させるのを支援します。
先に確認すること
分析や生成を始める前に、以下の入力を確認してください。不明な項目や曖昧な項目があれば、推測せずに質問してください。
- タスク — クエリ最適化/スキーマドキュメント作成/マイグレーション生成(スクリプトを選択します)
- SQL 入力 — 対象のクエリ、DDL ファイル、または変更前と変更後のスキーマの組み合わせ(スクリプトが実際に処理する入力です)
- 対象データベース/方言 — Postgres/MySQL など(インデックスの推奨内容やマイグレーション SQL の構文が変わります)
停止ルール:出力に最も影響する2〜3項目だけを質問してください。ユーザーが「とりあえず下書きを作って」と言った場合は、作業を進め、成果物の冒頭に前提を列挙してください。
クイックスタート
# Analyze a SQL query for performance issues
python scripts/query_optimizer.py --file slow_query.sql
# Analyze inline SQL
python scripts/query_optimizer.py --query "SELECT * FROM users WHERE name LIKE '%john%'"
# Explore schema from DDL file
python scripts/schema_explorer.py --file schema.sql
# Generate migration from schema diff
python scripts/migration_generator.py --from old_schema.sql --to new_schema.sql
# JSON output
python scripts/query_optimizer.py --file query.sql --format json
ツールの概要
query_optimizer.py
SQL クエリを分析し、パフォーマンス上の問題や最適化の機会を特定します。
| 機能 | 説明 |
|---|---|
| SELECT * の検出 | すべての列を選択するクエリを検出します |
| インデックス不足のヒント | インデックスが必要と思われる WHERE/JOIN の列を特定します |
| N+1 の検出 | 相関サブクエリのパターンを検出します |
| 全テーブルスキャン | 大きなテーブルに対する WHERE 句のないクエリを検出します |
| JOIN 分析 | 結合条件と結合の種類を確認します |
| LIKE の最適化 | 先頭にワイルドカードがある LIKE パターンを検出します |
schema_explorer.py
SQL DDL(CREATE TABLE)ファイルからドキュメントを生成します。
| 機能 | 説明 |
|---|---|
| テーブルカタログ | すべてのテーブルと列数を一覧表示します |
| 列の詳細 | 型、NULL 許容性、デフォルト値を記載します |
| インデックス一覧 | インデックスとその列を一覧表示します |
| リレーションシップのマッピング | 外部キーの関係を特定します |
| Markdown 出力 | スキーマドキュメントを生成します |
migration_generator.py
2つのスキーマ DDL ファイルを比較して、マイグレーション SQL を生成します。
| 機能 | 説明 |
|---|---|
| 列の追加 | 新しい列に対して ALTER TABLE ADD COLUMN を実行します |
| 列の削除 | 削除された列に対して ALTER TABLE DROP COLUMN を実行します |
| 型の変更 | 型の変更に対して ALTER TABLE ALTER COLUMN を実行します |
| 新しいテーブル | 新規テーブルに対して CREATE TABLE を実行します |
| テーブルの削除 | 削除されたテーブルに対して DROP TABLE を実行します |
| インデックスの変更 | インデックスの差分に対して CREATE/DROP INDEX を実行します |
ワークフロー
クエリ最適化のワークフロー
- 低速クエリを特定 - スロークエリログからクエリを収集します
- 分析 - 各クエリに対して query_optimizer.py を実行します
- 調査結果を確認 - 推定される影響に基づいて優先順位を付けます
- 最適化 - 提案された改善を適用します
- 検証 - 再分析して最適化を確認します
スキーマドキュメント作成のワークフロー
- DDL をエクスポート - データベースからスキーマをダンプします
- 調査 - schema_explorer.py を実行してドキュメントを生成します
- 確認 - リレーションシップとデータ型を確認します
- 公開 - プロジェクトのドキュメントに含めます
マイグレーションのワークフロー
- 現在のスキーマを取得 - 現在のスキーマ DDL をエクスポートします
- 目標を定義 - 目標とするスキーマ DDL を記述します
- マイグレーションを生成 - migration_generator.py を実行します
- SQL を確認 - 生成されたマイグレーションの安全性を確認します
- テスト - まずステージングデータベースに適用します
- デプロイ - ロールバック計画を用意して本番環境に適用します
CI 統合
# Lint SQL queries
python scripts/query_optimizer.py --file queries/ --format json --strict
# Generate schema docs
python scripts/schema_explorer.py --file schema.sql --format markdown > SCHEMA.md
リファレンスドキュメント
- SQL の最適化 - インデックス戦略、クエリパターン、アンチパターン
よく使うパターンのクイックリファレンス
クエリのアンチパターン
| パターン | 問題点 | 修正方法 |
|---|---|---|
SELECT * | 不要なデータを取得します | 必要な列を指定します |
LIKE '%term%' | インデックスを使用できません | 全文検索を使用します |
| 相関サブクエリ | N+1 クエリパターンになります | JOIN を使って書き換えます |
| WHERE 句がない | テーブル全体をスキャンします | 絞り込み条件を追加します |
WHERE 句の OR | インデックスの利用効率が低下します | UNION または IN を使用します |
| インデックス付き列への関数適用 | インデックスを使用できなくなります | 値側に適用します |
インデックスのガイドライン
| クエリパターン | インデックスの種類 |
|---|---|
WHERE col = value | col に対する B-tree |
WHERE col1 = v AND col2 = v | 複合インデックス(col1, col2) |
ORDER BY col | col に対する B-tree |
WHERE col LIKE 'prefix%' | col に対する B-tree |
WHERE col IN (...) | col に対する B-tree |
| 全文検索 | 全文インデックス |
マイグレーションの安全性
- フォワードマイグレーションとあわせて、必ずロールバック用の SQL を生成します
- 本番データのコピーに対してマイグレーションをテストします
- まず列を NULL 許容で追加し、次にデータをバックフィルしてから制約を追加します
- 列の名前を直接変更してはいけません。新しい列を追加し、データを移行してから古い列を削除します
コメント
Markdown 対応