• ベストアンサー

MySQLの型のサイズ指定で速度は変わりますか?

MySQLは型を大変細かく指定できますが、 以下のケースでINSERTやSELECTで速度差が出るでしょうか? ■パターン1 A:tinyint(1) B:tnnyintのサイズ指定なし ■パターン2 A:smallint B:int 他DBへ移行する予定がないなら厳密に指定した方が パフォーマンスが向上するでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

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

php4
質問者

お礼

やはりそうでしたか。intを小さくしても書き込み性能に 差がなかったです。ただ、読み込み時のメモリは少なく済むでしょうか? Text型意外でした。たくさん読むテーブルは、 なるべくvarcharを使用するようにしますね。ありがとうございます。

その他の回答 (1)

回答No.2

補足説明します。 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が発生します。

関連するQ&A