2016-04-12 10 views
0

列に必要な正確なデータ型を使用すると、パフォーマンス上のメリットはありますか?それともストレージ最適化ですか?正しいデータ型を使用するとパフォーマンスが向上します

たとえば、私はusersテーブルを作成しており、合計で200人のユーザーしか存在しないことを確信しています。選択/更新/挿入/削除を行うサーバーのデータを操作しているときに、TINYINT - UNをusers_id列に使用するか、またはINTを使用するかのパフォーマンスに違いはありますか?

同じことがユーザーの名前に適用されます。私は、今のところ、最長の名前の長さのユーザーが48だと知っていますが、将来65文字の名前の新しいユーザーがテーブルに挿入されないかどうかはわかりません。現在のところ、必要な長さだけを予約する場合は、VARCHAR(48)を使用してパフォーマンス上のメリットはありますか、新しいユーザーごとに列の許容長を常に確認しなくてもかまいませんか?VARCHAR(255)

+1

行の幅が狭い - >メモリに多くの行を収めることができます - >パフォーマンスが向上します –

+0

私はあなたの質問について少し混乱しています!最初に、正確なデータ型(可変長のものとは対照的)を使用するとパフォーマンス上の利点があるかどうかを尋ねると、tinyintまたはint(固定長データ型)またはvarchar(48)またはvarchar(255)(どちらも可変長データ型です)。第1の質問は理にかなっています.2番目の質問はありません。なぜなら、10億人を超えるユーザーを抱えているか、255文字までの名前を許可するかは、あなた次第です。 – Shadow

+0

@JoeStefanelliこれは必ずしも真実ではありません。 – Shadow

答えて

2

どちらの場合でも利点はほとんどありません。

この数値は、わずかなパフォーマンスの向上をもたらします。通常、整数は4、tinyintは1バイトです。したがって、フィールドが複数ある場合、レコードは小さくなります。レコードが小さくなると、データページ数が少なくなり、最終的にクエリがわずかに高速化されます。これは、あなたが多くのレコードを持っているときに現れます。

varcharの場合、その利点はありません。 varchar(48)varchar(255)の両方が同じ量の領域を占有します(255を超える長さに対して1つの加算バイトがあります)。値によって、このデータ型の領域が決まります。

その他のケースでは、大きな違いが生じる可能性があります。特に、日付/時刻関数を利用してインデックスをよりよく使用するためには、通常、日付をネイティブ形式として格納することが重要です。

関連する問題