文字データを asvarchar()
および not as として保存しchar()
、これらのデータ型に関する MySQL ドキュメントを参照してください (こちら)。これは、説明に実際に文字を格納するだけでなく、さらに数バイトのオーバーヘッドを加えます。
長いフィールドがパフォーマンスの悪いクエリを意味するかどうかについて。それは複雑な問題です。明らかに、最大サイズのレコードを使用すると、10 バイトのレコードに比べて速度が低下します。その理由は、I/O パフォーマンスに関係しています。MySQL はページを読み取り、ページには 1 つ以上のレコードを含めることができます。次に、ページ上のレコードが処理されます。
ページに収まるレコードが多いほど、I/O は少なくなります。
ただし、ハードウェアとストレージ エンジンによっては、さらに複雑になります。最近のディスクは、オペレーティング システムと同様に先読みを行います。そのため、ページの次の読み取り (ページが断片化されておらず、互いに隣接している場合) は、最初のページの読み取りよりもはるかに高速になる場合があります。実際、最初のページの処理が完了する前に、メモリ内に次のページが存在する場合があります。その時点で、各ページにいくつのレコードがあるかは問題ではありません。
また、レコードの 200 バイトはそれほど大きくありません。最初にアプリケーションを機能させることを心配し、次にパフォーマンス目標を達成することを心配する必要があります。途中で、varchar()
代わりにchar()
適切なサイズの数値を使用するなど、合理的な選択を行います (通貨値には浮動小数点ではなく固定小数点数値型を検討する場合があります)。