読み取り専用に使用されるテーブルを作成しているため、InnoDB の代わりに MyISAM を使用することにしました (ただし、提案は受け付けています)。ただし、このテーブルは非常に大きくする必要があります。各行は約 12 ~ 14 バイトですが、テーブル自体には数億から数十億の行が含まれます。
テーブルは次のようになります。
CREATE TABLE `tb1` ( `wid` int(11) NOT NULL DEFAULT '0',
`pid` int(11) NOT NULL DEFAULT '0',
`hit` tinyint(3) unsigned NOT NULL DEFAULT '0',
KEY `wid` (`wid`,`hit`,`pid`))
ENGINE=MyISAM DEFAULT CHARSET=latin1
LOAD DATA LOCAL INFILE
チャンクを使用して、テキスト ファイルからすべてのデータを読み込んでいます。
約 20M 行をロードするのに 30 秒かかります。次に、1 億行のチャンクをロードし、10 分後にクエリをキャンセルした後、合計で 38M 行しかありません。(10分で18M行?..)
このタイプの負荷は、線形ではなく指数関数的であるようです。何故ですか?
増加し続けるインデックスがある場合、LOAD DATA INFILE を高速化するにはどうすればよいですか?
LOAD DATA INFILE の速度に関して、MyISAM の代わりに InnoDB を使用する利点はありますか?
インデックスなしですべてのデータをロードしてから、後で適用する方が速いでしょうか?
ご意見ありがとうございます。