0

私は以下のようなテーブル構造を持っています:

CREATE TABLE IF NOT EXISTS `dnddata` (
  `numbers` varchar(10) NOT NULL,
  `opstype` char(1) NOT NULL,
  PRIMARY KEY (`numbers`)
) ENGINE=MYISAM DEFAULT CHARSET=latin1
/*!50100 PARTITION BY KEY (numbers)
PARTITIONS 20 */;

このテーブルにデータを挿入すると、時間がかかります。

300 万件のレコードを挿入するのに 50 分かかります。

と を使用load datainsert into dnddata SELECT * from another_myisamtableました。

どちらの方法もほぼ同じ時間がかかります。

パーティションなしの同じテーブルで、2 分もかかりません。

5000 万レコードのデータを挿入する必要があります。

この多くのレコードを挿入する最善の方法を提案してください。

ありがとう..

4

1 に答える 1

2

パーティション化されたテーブルの面白い点は、INSERT1 つのパーティションだけにしようとすると、すべてのパーティションをロックダウンする (または少なくとも「ロックにアクセスする」) 必要があることです。つまり、より多くのパーティション == より多くのロック。

詳細については、Giuseppe Maxia のブログを参照してください。

上記の投稿でINSERTは単一の行について説明していますが、同じ問題が複数の行にも当てはまります。

MyISAM を使用しているため、実際のロックが取得されます。同じ形式の InnoDB テーブルで同じことを試すこともできます。

于 2012-07-18T08:05:55.673 に答える