2012-11-14 131 views
2

我想從批處理數據創建一個表用於數據挖掘目的。每天將有大約2500萬行數據進入此表。在表格中定義了幾個索引,所以插入(我做批量插入)速度非常慢。沒有指數,我可以堅持40K行,而指數更像3-4K,這使得整個事情變得不可行。因此,這個想法是白天分割數據,禁用鍵,然後做一天的插入,並重新啓用索引。重新啓用一天數據量的索引需要花費20分鐘,這很好。這使我想到我的問題。當您重新啓用指數時,是否必須重新計算所有分部的指數,還是僅僅爲那一天?似乎很清楚,對於分區所在的索引(在這種情況下是日期),它應該只在那一天。但其他指數呢?如果需要重新計算所有分區的索引,則無法在合理的時間內完成。有人知道嗎?Mysql分區索引

顯示創建是這樣的:

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 

,暫不分割。

+0

你現在的表結構是什麼? (SHOW CREATE TABLE your_table'的輸出) – Jocelyn

+0

我編輯過... – delmet

回答

0

您在上禁用/啓用索引。這意味着索引將被禁用/啓用在表的所有部分。

考慮這個情景,加載新的數據:

  1. 創建臨時表定義的所有分區,您將需要
  2. 將數據加載到臨時表中沒有索引。
  3. 在此表上創建索引。
  4. 將分區移至目標表,該表與暫存表分區相同。對臨時表

  • 刪除索引分區可控的方式將現有數據,可以使用相同的邏輯將數據移動到新的分區表。