6 つの INT 列、1 つの SMALLINT、2 つの TINYINT、および 1 つの FLOAT 列を持つ MyISAM エンジンを使用する MySQL テーブルがあります。数十億の行があります (データ ファイルは 100 GB です)。キーを有効にしてすべての列にインデックスを付けようとしましたが、それは起こりませんでした。「myisamchk -r tableName」を試すと、次のエラーが発生しました。
- recovering (with sort) MyISAM-table 'tableName'
Data records: 662929483
- Fixing index 1
myisamchk: error: myisam_sort_buffer_size is too small
MyISAM-table 'tableName' is not fixed because of errors
Try fixing it by using the --safe-recover (-o), the --force (-f) option or by not using the --quick (-q) flag
代わりに"myisamchk -rov tableName " を使用すると、再び永遠に時間がかかります (おそらく、ソート方法ではなくキーキャッシュ方法を使用しているため)。
この場合、myisam_sort_buffer_size を増やすことは意味がありません (myisam_sort_buffer_size とsort_buffer_sizeに対する答えは、値を増やすことは決して意味がないことを示唆しています)。マシンには 32GB の RAM が搭載されています。