MySQL 8.0 リファレンスマニュアル


8.4.2.2 文字および文字列型の最適化

文字および文字列カラムの場合、次のガイドラインに従います。

  • 言語固有の照合機能が必要でない場合は、比較およびソート操作を速くするため、バイナリ照合順序を使用します。 特定のクエリー内でバイナリ照合順序を使用するには、BINARY 演算子を使用できます。

  • さまざまなカラムの値を比較する場合、可能なかぎり、それらのカラムを同じ文字セットと照合順序で宣言し、クエリー実行中の文字列変換を避けます。

  • サイズが 8K バイト未満のカラム値では、BLOB の代わりにバイナリ VARCHAR を使用します。 GROUP BY および ORDER BY 句は一時テーブルを生成する可能性があり、これらの一時テーブルでは、元のテーブルに BLOB カラムが含まれない場合に、MEMORY ストレージエンジンを使用することがあります。

  • テーブルに名前や住所などの文字列カラムが含まれるが、多くのクエリーでそれらのカラムを取得しない場合、文字列カラムを個別のテーブルに分割し、必要に応じて、外部キーで結合クエリーを使用することを考慮します。 MySQL で行から何らかの値を取得する場合、その行 (およびおそらくその他の隣接する行) のすべてのカラムを含むデータブロックを読み取ります。 もっとも頻繁に使用するカラムのみで、各行を小さくすることで、より多くの行を各データブロックに収めることができます。 そのようなコンパクトなテーブルは、一般的なクエリーのディスク I/O やメモリーの使用量を削減します。

  • InnoDB テーブルで主キーとして、ランダムに生成された値を使用する場合、可能であれば、現在の日時などの降順の値でプリフィクスを付けます。 連続したプライマリ値が、相互に物理的に近くに保存されていれば、InnoDB はそれらを高速に挿入し、取得できます。

  • 数値カラムの方が通常同等の文字列カラムより推奨される理由については、セクション8.4.2.1「数値データの最適化」を参照してください。


関連キーワード:  テーブル, InnoDB, インデックス, カラム, クエリー, 結合, ステートメント, データベース, 状態, データ