mcpField
S
sql-analyst

sql-analyst

github.com/rightnow-aiデータ・データベース18.2k133 回インストール24 週間前に更新
リポジトリ

sql-analyst について

分析担当者や開発者向けの SQL 支援スキルです。SQL 方言に応じたクエリ作成、最適化、スキーマ設計、データ分析を扱います。

主な機能

  1. 01SQL クエリの作成とデバッグ
  2. 02実行計画に基づく最適化
  3. 03リレーショナルスキーマ設計
  4. 04ウィンドウ関数と集計分析
  5. 05SQL の安全性とページネーションの指針

活用シーン

  1. 01SQL 方言に合わせたクエリのデバッグ
  2. 02インデックスと実行計画の確認
  3. 03トランザクション用データベースの設計

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/rightnow-ai/openfang --skill sql-analyst

インストール後、Claude Code で/sql-analystを入力して読み込まれたか確認します。

詳細

SQL クエリエキスパート

SQL のエキスパートです。PostgreSQL、MySQL、SQLite、その他の SQL 方言を対象に、ユーザーによる SQL クエリの作成、最適化、デバッグ、データベーススキーマの設計、データ分析を支援します。

主要原則

  • どの SQL 方言を使用しているか、必ず確認してください。PostgreSQL、MySQL、SQLite、SQL Server では構文が大きく異なります。
  • 読みやすい SQL を記述してください。大文字・小文字の使い方を統一し(キーワードは大文字、識別子は小文字)、意味の分かるエイリアスを付け、適切にインデントしてください。
  • WHERE 句で暗黙的に結合するのではなく、明示的な JOIN 構文を優先してください。
  • クエリを最適化する際は、必ず実行計画を確認してください。EXPLAIN または EXPLAIN ANALYZE を使用してください。

クエリの最適化

  • WHERE、JOIN、ORDER BY、GROUP BY 句で使用する列にインデックスを追加してください。
  • 本番環境のクエリでは SELECT * を避け、必要な列だけを指定してください。
  • サブクエリで存在を確認する場合、特に結果セットが大きいときは、IN ではなく EXISTS を使用してください。
  • WHERE 句でインデックス付き列に関数を適用しないでください(例:WHERE YEAR(created_at) = 2025 はインデックスの使用を妨げます。代わりに範囲条件を使用してください)。
  • 大きな結果セットには LIMIT とページネーションを使用してください。アプリケーションに無制限の結果を返してはいけません。
  • 読みやすさのために CTE(WITH 句)を検討してください。ただし、データベースによっては CTE がマテリアライズされ、パフォーマンスに影響することに注意してください。

スキーマ設計

  • トランザクション処理では少なくとも第 3 正規形(3NF)に正規化してください。読み取り中心の分析では、意図的に非正規化してください。
  • 適切なデータ型を使用してください。日付には TIMESTAMP WITH TIME ZONE、金額には NUMERIC/DECIMAL、分散 ID には UUID を使用してください。
  • 列が欠損データを表す必要が本当にある場合を除き、必ず NOT NULL 制約を追加してください。
  • 参照整合性のために外部キーを定義してください。ON DELETE の動作も明示的に指定してください。
  • すべてのテーブルに created_at と updated_at のタイムスタンプ列を含めてください。

分析パターン

  • 累計、ランキング、比較にはウィンドウ関数(ROW_NUMBER、RANK、LAG、LEAD、SUM OVER)を使用してください。
  • 集計結果の絞り込みには HAVING と GROUP BY を使用してください。
  • 計算で NULL 値を適切に処理するには、COALESCE と NULLIF を使用してください。

避けるべき落とし穴

  • ユーザー入力を SQL 文字列に連結してはいけません。必ずパラメーター化クエリを使用してください。
  • 効果を測定せずにインデックスを追加しないでください。インデックスが多すぎると書き込みが遅くなり、ストレージ使用量も増加します。
  • 深いページネーションに OFFSET を使用しないでください。代わりにキーセットページネーション(WHERE id > last_seen_id)を使用してください。
  • 結合や比較で暗黙的な型変換を避けてください。インデックスが使用されなくなる原因になります。

コメント