- ベストアンサー
型の長さ
テーブルを作るときに型と長さを指定すると思うのですが、長さが不特定なものが入るのでVARCHAR(255)として実際に運用してみると長さが32でもいいのかなぁっと思っています。(予想よりはるかに下回りました。)この場合、やはりメモリの無駄遣いをしているのでしょうか? 今はまだレコードが少ないのでまったく問題にはなっていないのですが、レコードが増えると検索や挿入に影響がでてくるのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
VARが付いている方は、「可変長の文字列」ですので、実際に入っているデータ+1バイトの記憶容量が確保されるとのことです。 つまりvarchar(255)の長さの指定は最大値(これ以上長ければ切り捨てる)というだけです、元データが小さいなら、それに応じて小さくしてもファイルサイズに変化はないでしょう。 それに対してchar(255)だと、実際のデータが1文字であっても、空白で埋めて255バイトを確保します。 検索やソートなどは、実際に入っているデータで決まると思うので、型の長さ指定はあまり影響しないでしょう。 indexの長さ指定の方が重要のようです。 http://dev.mysql.com/doc/refman/4.1/ja/string-types.html http://dev.mysql.com/doc/refman/4.1/ja/storage-requirements.html http://dev.mysql.com/doc/refman/4.1/ja/create-index.html
その他の回答 (1)
- chukenkenkou
- ベストアンサー率43% (833/1926)
>メモリの無駄遣いをしているのでしょうか? メモリとは、具体的に何を指した質問でしょうか? VARCHARのデータは、DB中には「行長+データ」で格納されており、DBスペースが無駄になっているということはありません。 DBのI/Oも、4KBなどのページといった単位で行われるので、定義長が不必要に大きくなっていることの影響は受けません。 しかし、クライアントとサーバ間のデータの受け渡し等で、予め定義長で作業領域を確保しておかなければならない部分も当然あり、そういう意味では無駄使いしていることになります。 >今はまだレコードが少ないのでまったく問題にはなっていないのですが、レコードが増えると検索や挿入に影響がでてくるのでしょうか? 不必要な長さで定義した表や列がたくさんあるなら、適切に定義していれば発生しなかった作業領域不足といった現象が、起こらないとは言えません。