このページは機械翻訳したものです。
このセクションでは、InnoDB テーブルを使用する場合のベストプラクティスについて説明します。
最も頻繁にクエリーするカラムを使用してすべてのテーブルに primary key を指定するか、明らかな主キーがない場合は auto-increment 値を指定します。
これらのテーブルの同一の ID 値に基づいて複数のテーブルからデータが取得される場合は、joins を使用します。 結合のパフォーマンスを高速にするには、結合カラム上に外部キーを定義し、各テーブル内でそれらのカラムを同じデータ型で宣言します。 外部キーを追加すると、参照カラムが確実にインデックス付けされ、パフォーマンスを向上させることができます。 また、外部キーは、影響を受けるすべてのテーブルに削除または更新を伝播し、対応する ID が親テーブルに存在しない場合に子テーブルへのデータの挿入を防止します。
autocommit をオフにします。 1 秒間に何百回もコミットすると、パフォーマンスに上限が設定されます (これは、ストレージデバイスの書き込み速度で制限されます)。
関連する DML 操作のセットを、
START TRANSACTIONおよびCOMMITステートメントでカッコで囲んで transactions にグループ化します。 頻繁にはコミットしたくない一方で、コミットなしで何時間も実行されるINSERT、UPDATE、またはDELETEステートメントの巨大なバッチも発生させたくありません。LOCK TABLESステートメントを使用しません。InnoDBは、一度に同じテーブルへのすべての読み取りおよび書き込みを行うことで、信頼性や高パフォーマンスを犠牲にせずに、複数のセッションを処理できます。 行のセットへの排他的な書き込みアクセス権を取得するには、SELECT ... FOR UPDATEという構文を使用して、更新対象の行のみをロックします。-
innodb_file_per_tableオプションを有効にするか、一般的なテーブルスペースを使用して、テーブルのデータおよびインデックスを system tablespace ではなく別々のファイルに配置します。innodb_file_per_tableオプションはデフォルトで有効になっています。 データおよびアクセスパターンが
InnoDBのテーブルまたはページの compression 機能を利用できるかどうかを評価します。 読み取りおよび書き込みの機能を犠牲にせずに、InnoDBテーブルを圧縮できます。オプション
--sql_mode=NO_ENGINE_SUBSTITUTIONを指定してサーバーを実行し、CREATE TABLEのENGINE=句で指定されたエンジンに問題がある場合に、別のストレージエンジンでテーブルが作成されないようにします。