MySQLデータベース操作
このスキルは、MySQL固有のスキーマ、クエリ、インデックス、トランザクション、および運用作業に使用します。バージョン依存の動作に依存する前に、実際のサーバーバージョン、SQLモード、ストレージエンジン、文字セット/照合順序、トポロジー、および環境を確認してください。
クエリ実行前の調査
リポジトリのマイグレーション、スキーマ定義、ORMマッピング、および読み取り専用のメタデータクエリを優先してください。テーブルの粒度、主キーと一意キー、外部キー、NULL許容性、生成列、パーティション、インデックス、データ量、およびリレーションシップを確認してください。アプリケーションフィールドから物理的なカラム名を推測しないでください。
資格情報と行データを保護してください。接続文字列、シークレット、完全な顧客レコード、または不要な個人データを決して表示しないでください。タスクを満たす場合は、最小権限のアカウントと非本番環境または読み取りレプリカを使用してください。
正確で範囲指定されたクエリを作成する
- コントラクトが既知の場合は、
SELECT *ではなく名前付きカラムを選択します。 - 値には型付きパラメータを使用し、信頼できない入力をSQL識別子や式に連結しないでください。
- 結合カーディナリティを明示的にし、集計前に乗算を確認してください。
NULL、タイムゾーン、照合順序、精度、および包含/排他的な時間範囲を意図的に処理します。- ページネーションや再現可能な抽出のために決定論的な順序付けを追加します。該当する場合は、大きな可変セットに対してキーセットページネーションを優先します。
- 探索的な読み取りを選択的な述語と制限で範囲指定しますが、必要な集計や完全性の保証を暗黙的に変更する制限を追加しないでください。
結果をカウント、分母、エッジケース、および決定が重要な場合は独立した計算で検証します。
安全にパフォーマンスを分析する
利用可能な最も侵襲の少ないプランコマンドを使用します。EXPLAINまたはドキュメント化された非実行形式を優先し、EXPLAIN ANALYZEはステートメントを実行し、そのワークロードが認可され範囲指定されている場合にのみ使用します。推定行数と実際の行数、アクセスタイプ、選択されたキーと可能なキー、結合順序、一時テーブル、ソート、カバリング動作、および述語選択性を検査します。
インデックスはトレードオフです。カラム順序、等価/範囲述語、順序付け、カバリング要件、プレフィックス長、書き込み増幅、ストレージ、ロック/ビルド動作、冗長インデックス、および実際のワークロード頻度を評価します。すべてのフィルターや結合カラムに独自のインデックスが必要だと断言しないでください。
ミューテーションとトランザクションを制御する
INSERT、UPDATE、DELETE、DDL、ロック、メンテナンス、レプリケーション、または設定変更の前に、ターゲット環境、影響を受ける行の見積もり、認可、トランザクション/ロック動作、バックアップまたはロールバックパス、および観測可能な停止条件を確認してください。可能であれば、読み取り専用クエリで正確なターゲットセットをプレビューします。
実際のエンジンと操作に従ってトランザクションを使用し、すべてのDDLや外部効果がロールバックされるとは想定しないでください。トランザクションを短く保ち、安定した述語を使用し、デッドロック/リトライ動作を確認し、コミット前に影響を受ける行を検証します。スキーマ/データマイグレーションには、破壊的なインプレース変更ではなく、段階的な互換性アプローチを使用します。
明示的な認可なしに、本番ミューテーションの実行、インデックスの作成/削除、ユーザーや権限の変更、レプリケーションの変更、セッションの強制終了、サーバー設定の変更を行わないでください。
ハンドオフ
SQLまたは変更計画、仮定、スキーマ/バージョンの証拠、パラメータ、期待されるカーディナリティ、プラン調査結果、安全境界、および検証手順を返します。実行が認可された場合は、環境、タイムスタンプ、影響を受ける行、トランザクション結果、前後の証拠、残存リスク、およびリカバリ状態を含めてください。コマンドの成功だけでは不十分です。要求されたデータまたは運用結果を検証してください。