MySQL (5.0.x および 5.1.x のさまざまなバージョンを試しました) で 2^32 行を超える MyISAM テーブルを作成したいと考えています。これを実現する方法は、MySQL が 4 バイトの行ポインタではなく 8 バイトを使用するようにすることです。
以下は MySQL のマニュアルからの引用です。
--with-big-tables オプションを使用して MySQL をビルドすると、行の制限が 1.844E+19 行に増えます。セクション2.3.2「一般的な構成オプション」を参照してください。Unix および Linux のバイナリ ディストリビューションは、このオプションでビルドされます。
シンプルですね。しかし、Linux x86_64 用のさまざまなバイナリ ディストリビューションを試し、「--with-big-tables」オプションを使用してソース コードから MySQL を構築しました。いずれの場合も、2^32 の制限を超えることはできません。次のようにテーブルを作成します。
CREATE TABLE big (col int) MAX_ROWS=1099511627776
そして、テーブルのステータスを確認すると、次のように表示されます。
Create_options: max_rows=4294967295
32 ビットの煉獄を脱出するにはどうすればよいですか? InnoDB を使用すると問題が解決する可能性がありますが、実行しているクエリの種類ではパフォーマンスが大幅に低下します。
参考までに、問題を解決しなかった重要なリファレンスを次に示します。