2

データマイニングの目的で、バッチデータからテーブルを作成したいと思います。このテーブルには、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 

現在、パーティション化されていません。

4

1 に答える 1

0

テーブルのインデックスを無効/有効にします。これは、テーブルのすべての部分でインデックスが無効/有効になることを意味します。

新しいデータをロードするには、次のシナリオを検討してください。

  1. 必要なすべてのパーティションを定義するステージング テーブルを作成する
  2. インデックスなしでステージング テーブルにデータを読み込みます。
  3. このテーブルにインデックスを作成します。
  4. ステージング テーブルと同じようにパーティション分割されたターゲット テーブルにパーティションを移動します。
  5. ステージング テーブルのインデックスを削除する

制御可能な方法で既存のデータを分割するには、同じロジックを使用してデータを新しい分割テーブルに移動できます。

于 2013-06-01T18:05:17.163 に答える