1

検査台があります。テストテーブルは次のとおりです。

CREATE TABLE  `mytest` (
  `num1` int(10) unsigned NOT NULL,
  KEY `key1` (`num1`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

このテーブルに 5000 万行を挿入しました。

テーブルのステータスを表示すると、avg_row_length は 7 です。mySQL は整数に 4 バイトを使用するため、4 が表示されると予想していました。キーは avg_row_length に影響しますか? .MYD ファイルを見ると、サイズは 334 MB です。これは、avg_row_length が 7 の場合に正確に指定する必要がある値ですが、int しかないため、実際には 190 MB になると予想していました。

+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| Name           | Engine | Version | Row_format | Rows     | Avg_row_length | Data_length | Max_data_length  | Index_length | Data_free | Auto_increment | Create_time         | Update_time         | Check_time | Collation         | Checksum | Create_options | Comment |
+----------------+--------+---------+------------+----------+----------------+-------------+------------------+--------------+-----------+----------------+---------------------+---------------------+------------+-------------------+----------+----------------+---------+
| mytest         | MyISAM |      10 | Fixed      | 50000000 |              7 |   350000000 | 1970324836974591 |    600518656 |         0 |           NULL | 2010-05-22 09:15:06 | 2010-05-22 19:32:53 | NULL       | latin1_swedish_ci |     NULL |                |         |

mytest テーブルの show table status の出力を含めました。フォーマットについて申し訳ありません:D よろしくお願いします!

アレッサンドロ・フェルッチ

4

1 に答える 1

2

問題は、MySQL がデフォルトで使用するポインタ サイズにあると思います。

MySQLリファレンスからの引用:

AVG_ROW_LENGTH

テーブルの平均行長の概算。これは、可変サイズの行を持つ大きなテーブルに対してのみ設定する必要があります。

MyISAM テーブルを作成すると、MySQL は MAX_ROWS オプションと AVG_ROW_LENGTH オプションの積を使用して、結果のテーブルの大きさを決定します。どちらのオプションも指定しない場合、MyISAM データおよびインデックス ファイルの最大サイズはデフォルトで 256 TB になります。(オペレーティング システムがそれほど大きなファイルをサポートしていない場合、テーブル サイズはファイル サイズの制限によって制限されます。) ポインター サイズを抑えてインデックスを小さく高速化したいが、実際には大きなファイルは必要ない場合は、 myisam_data_pointer_size システム変数を設定することで、デフォルトのポインター サイズを減らすことができます。(セクション5.1.4「サーバーシステム変数」を参照してください。) すべてのテーブルをデフォルトの制限を超えて拡大できるようにし、テーブルを必要以上に少し遅くして大きくしても構わない場合は、デフォルトのポインターサイズを増やすことができます。この変数を設定することによって。

テーブルの作成またはステートメントで自分自身を設定MAX_ROWSしてみて、それが役立つかどうかを確認してください。AVG_ROW_LENGTHALTER TABLE

于 2010-05-25T17:36:02.950 に答える