2011-11-16 4 views
1

Int(11)は4バイトですか? 10進数の前の小数点(5,0) - 5、小数点以下の0 ... ...必要なバイト数についてわかりません...(0..99999 ... 65536は2バイトをとります)...それでDecimal(5,0)は3バイトかかるでしょうか?MySQL:0から99999までの整数の10進数(5,0)とINT(11) - パフォーマンスとディスク容量

パフォーマンスについて話す場合は、どうすればよいですか?

テーブルは手動で(しばらく)変更されるため、そのテーブルからのSELECTのみがあります。

答えて

1

いくつかの予備テストから、INT(11)またはDECIMAL(5,0)のどちらを使用するかにかかわらず、ストレージ要件は実際に同じであるようです。次のクエリで2つのテーブルを作成しました。

CREATE TABLE Table1(id INT(11)); 

CREATE TABLE Table2(id DECIMAL(5,0)); 

各テーブルに単一の値を挿入し、そして両方のテーブルについては、以下を実行した後、私は、各行のDATA_LENGTH 7.挿入追加の行は、7つのバイトのいずれかによって、テーブルのサイズを増加させたことを見ました。

SELECT * FROM INFORMATION_SCHEMA.tables where table_name='Table1'; 

このようにすべてのものと同様に、いくつかのテーブルを作成して確認するのが最も簡単な方法です。この場合、INT(11)は余分なスペースを必要としないため、プロセッサが直接処理できるより基本的なデータ型なので、おそらく処理が少なくて済みます。 DECIMALを使うとき、MySQLはプロセッサが実際に使うことができるフォーマットに数値を変換しなければなりません。おそらくこの場合は整数であり、おそらくフォーマット間を行き来するオーバーヘッドがあります。

+0

ありがとうございます。私は同じように直感的に考えました。 – Haradzieniec

+0

私はもっと良い解決策、mediumint(9)-3バイト、[-8388608 ... 8388607]を見つけたと思います。ありがとうございました! – Haradzieniec

1

これは、使用しているMySQLバージョンに大きく依存します。

MySQLの場合は、http://dev.mysql.com/doc/refman/4.1/en/numeric-types.htmlを参照してください。

MySQL 5.0.3以降については、http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.htmlを参照してください。

MySQL 5.1以上については、http://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-changes.htmlを参照してください。

+0

したがって、MySQL 5.1以降では、リンクに関するDecimal(5,0)は3バイト必要です。 SELECTクエリでパフォーマンスについて何か教えてください。Decimal(5,0)vs int(11)?ありがとうございました。 – Haradzieniec

+1

これは単なる数値なので、測定可能なパフォーマンスの違いはまったくありません。 – AndreKR