mysql について
安全で測定可能な MySQL/InnoDB の変更を計画・検証するスキルです。データベース開発者向けに、証拠の確認とロールバックを重視しながら、スキーマ設計、インデックス、クエリ最適化、ロック、運用手順を案内します。
主な機能
- 01スキーマ設計の指針
- 02インデックスとパーティションの計画
- 03クエリ最適化の実践
- 04トランザクションとロックの助言
- 05運用手順とロールバック
活用シーン
- 01新しい OLTP テーブルのスキーマ設計
- 02EXPLAIN による遅いクエリの調査
- 03本番データベース変更の安全な計画
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pageai-pro/ ralph-loop --skill mysqlインストール後、Claude Code で/mysqlを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/character-sets.mdcomposite-indexes.mdconnection-management.mdcovering-indexes.mddata-types.mddeadlocks.mdexplain-analysis.mdfulltext-indexes.mdindex-maintenance.mdisolation-levels.mdjson-column-patterns.mdn-plus-one.mdonline-ddl.mdpartitioning.mdprimary-keys.mdquery-optimization-pitfalls.mdreplication-lag.mdrow-locking-gotchas.md詳細
MySQL
安全で測定可能な MySQL/InnoDB の変更を行うには、このスキルを使用してください。
ワークフロー
- ワークロードと制約(読み取り/書き込みの比率、レイテンシ目標、データ量、MySQL のバージョン、ホスティングプラットフォーム)を定義します。
- 以下の各セクションでリンクされている、関連する参照ファイルのみを読みます。
- トレードオフを含め、問題を解決できる最小限の変更を提案します。
- 証拠(
EXPLAIN、EXPLAIN ANALYZE、ロック/接続のメトリクス、本番環境で安全なロールアウト手順)を用いて検証します。 - 本番環境への変更には、ロールバックとデプロイ後の検証を含めます。
スキーマ設計
- 書き込み負荷の高い OLTP テーブルには、幅が狭く単調増加する PK(
BIGINT UNSIGNED AUTO_INCREMENT)を優先します。 - クラスタ化 PK にランダムな UUID 値を使わないでください。外部 ID が必要な場合は、UUID をセカンダリの一意なカラムに保持します。
- 常に
utf8mb4/utf8mb4_0900_ai_ciを使用します。NOT NULLと、TIMESTAMPよりDATETIMEを優先します。 ENUMよりルックアップテーブルを使用します。3NF に正規化し、計測で効果が確認されたホットパスに限って非正規化します。
参照:
インデックス作成
- 複合インデックスの順序は、等価条件を先にし、その後に範囲/ソート条件を指定します(最左プレフィックスルール)。
- 範囲条件を使うと、それ以降のカラムではインデックスが使用されません。
- セカンダリインデックスには PK が暗黙的に含まれます。長い文字列にはプレフィックスインデックスを使用します。
performance_schemaで監査し、count_read = 0のインデックスを削除します。
参照:
パーティショニング
- 時系列テーブル(5,000 万行超)または大規模テーブル(1 億行超)をパーティショニングします。早めに計画してください。後から導入すると全体の再構築が必要になります。
- すべての一意キー/PK にパーティションカラムを含めます。必ず
MAXVALUEのキャッチオールパーティションを追加します。
参照:
クエリ最適化
EXPLAINを確認します。警戒すべき項目はtype: ALL、Using filesort、Using temporaryです。OFFSETではなくカーソルページネーションを使用します。WHERE内でインデックス付きカラムに関数を適用しないでください。- 挿入をバッチ処理します(500~5000 行)。重複排除が不要な場合は
UNIONよりUNION ALLを使用します。
参照:
トランザクションとロック
- デフォルトは
REPEATABLE READ(ギャップロック)です。競合が激しい場合はREAD COMMITTEDを使用してください。 - 一貫した順序で行にアクセスすると、デッドロックを防げます。エラー 1213 が発生した場合は、バックオフして再試行してください。
- トランザクションの外で I/O を実行してください。
SELECT ... FOR UPDATEは控えめに使用してください。
参考資料:
運用
- 可能な場合はオンライン DDL(
ALGORITHM=INPLACE)を使用し、まずレプリカでテストしてください。 - 接続プーリングを調整し、負荷時に
max_connectionsが枯渇しないようにしてください。 - レプリケーション遅延を監視し、書き込み中にレプリカから古いデータを読み取らないようにしてください。
参考資料:
ガードレール
- 一律の経験則より、測定に基づく根拠を優先してください。
- アドバイスを提示する際は、MySQL のバージョン固有の動作に留意してください。
- 破壊的なデータ操作(ドロップ/削除/切り捨て)の前に、人間による明示的な承認を求めてください。
コメント
Markdown 対応