プロが教える店舗&オフィスのセキュリティ対策術

MySQLは型を大変細かく指定できますが、
以下のケースでINSERTやSELECTで速度差が出るでしょうか?

■パターン1
A:tinyint(1)
B:tnnyintのサイズ指定なし

■パターン2
A:smallint
B:int

他DBへ移行する予定がないなら厳密に指定した方が
パフォーマンスが向上するでしょうか?

A 回答 (2件)

tinyint(1)といったint系のデータ型は、実際の長さは同じなので性能上、差はないです。


smallintやintなどのint系も長さが2バイト、4バイトといった違いだけなので、性能上、差はないです。
性能上の差がでる可能性があるのは、varchar系でなく、text系などを無闇に使うことです。
これらのデータ型は、必ず1行を格納するために作成される「基本の行」とは、別の行で管理されるからです。
つまり、1行の操作で、複数回のI/Oが発生してしまいます。
    • good
    • 0
この回答へのお礼

やはりそうでしたか。intを小さくしても書き込み性能に
差がなかったです。ただ、読み込み時のメモリは少なく済むでしょうか?

Text型意外でした。たくさん読むテーブルは、
なるべくvarcharを使用するようにしますね。ありがとうございます。

お礼日時:2008/12/02 09:01

補足説明します。



tinyint(m)とmを指定しても、tinyintとmを指定しなくても、実際に格納できる値の範囲は同じです。
MySQLでは、mを表示時の位置合わせで用いられる程度のものであり、指定することにメリットは殆どないと考えていいと思います。
smallint、int、bigintは、長さが2、4、8バイトで、表せる値が違ってきます。これらの列は、1行を格納する場合に必ず作成される「基本の行」内で管理されるので、どのデータ型を選択するかにより、性能差は出ることはないでしょう。したがって、どの程度の範囲の値を使うかで、適切なデータ型を選ぶことになります。

可変長文字列で、長さの上限が30とか50、100といったように事前に想定できる場合は、varchar(100)といった定義をした方が性能面ではいいでしょう。これを、textにしたり、varcharでも無闇に大きくvarchar(5000)などとしてしまうと、基本の行とは別の1個以上の行として格納されるため、1行の操作で複数回のI/Oが発生します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す