2012-07-18 52 views
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 */; 

當我將數據插入該表以長的時間。

花50分鐘插入300萬條記錄。

我已經使用load datainsert into dnddata SELECT * from another_myisamtable

這兩種方法所用時間幾乎相等。

同一張表沒有分區少於2分鐘。

我必須插入5000萬條記錄的數據。

請建議哪個插入這些記錄的最佳方法。

謝謝..

回答

1

約分區表有趣的是,當你嘗試INSERT逼到一個分區,你必須去和鎖定(或者至少是「交鎖到此一遊」)的所有分區。所以 - 更多的分區==更多的鎖。

你可以在Giuseppe Maxia's blog瞭解更多關於它的信息。

儘管上述帖子討論單行的INSERT,但同樣的問題也適用於多行。

由於您使用的是MyISAM,因此會進行實際鎖定。您可以選擇嘗試相同格式的InnoDB表格。

+0

謝謝shlomi,鎖定對我們來說不是問題。我們在服務器閒置時插入記錄。我的要求是插入更少的時間.. – 2012-07-18 09:17:54

+0

我明白了。儘管如此,無論可能存在爭用,這種鎖定本身都需要時間。 – 2012-07-18 10:02:27