データマイニングの目的で、バッチデータからテーブルを作成したいと思います。このテーブルには、1日に約2500万行のデータが含まれます。テーブルにはいくつかのインデックスが定義されているため、挿入(バッチ挿入を行います)の速度は非常に遅くなります。インデックスがない場合は40K行を貼り付けることができますが、インデックスがある場合は3〜4 Kに近いため、このすべてを実行できません。したがって、データを日ごとに分割し、キーを無効にしてから、その日の挿入を実行し、インデックスを再度有効にするという考え方です。1日分のデータでインデックスを再度有効にするには、たとえば20分かかります。これは問題ありません。これは私の質問に私を連れて行きます。インデックスを再度有効にすると、すべてのパーティションのインデックスを再計算する必要がありますか、それともその日だけですか?パーティションがオンになっているインデックス(この場合は日付)については、その日のみである必要があることは明らかです。しかし、他のインデックスはどうですか?すべてのパーティションのインデックスを再計算する必要がある場合、妥当な時間内にそれを実行する方法はありません。誰か知っている?
Showcreateは次のようになります。
sts | CREATE TABLE `sts` (
`userid` int(10) unsigned DEFAULT NULL,
`urlid` int(10) unsigned DEFAULT NULL,
`geoid` mediumint(8) unsigned DEFAULT NULL,
`cid` mediumint(8) unsigned DEFAULT NULL,
`m` smallint(5) unsigned DEFAULT NULL,
`t` smallint(5) unsigned DEFAULT NULL,
`d` tinyint(3) unsigned DEFAULT NULL,
`requested` int(10) unsigned DEFAULT NULL,
`rate` tinyint(4) DEFAULT NULL,
`mode` varchar(12) DEFAULT NULL,
`session` smallint(5) unsigned DEFAULT NULL,
`sins` smallint(5) unsigned DEFAULT NULL,
`tos` mediumint(8) unsigned DEFAULT NULL,
PRIMARY KEY (userid, urlid, requested),
KEY `id_index` (`m`),
KEY `id_index2` (`t`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
現在、パーティション化されていません。