2017-09-22 39 views
0

我有一張大約200,000,000行的MYISAM表,其中包含主鍵 但我沒有索引。如何將數據從表中移動到另一個Mysql大表中

,我想創建一個索引,但probleme是,當我執行添加索引的請求表服務器被打破:

ALTER TABLE `db`.`table` 
ADD INDEX `index_0001` (`col1` ASC); 

因此,我會創建一個新表,並根據需要配置相應指標和舉措數據添加到新表並重命名它。

我想這MANIP:

INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 0 ; 
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 100000 ; 
INSERT INTO `db`.`table` (field1,field2,..) select field1,field2,....from eventdata limit 100000 offset 200000 ; 
.......... etc 

但是當偏移變得更加然後100,000,000查詢行響應變得更慢。

有沒有其他解決方案?

tahnks

回答

1

使用limit 100000 offset 100000 ;意味着MySQL的搜索10萬次的記錄和100001獲得備案;

搜索100000條記錄是TABLE FULL SCAN,所以它很慢;

使用Primary key搜索是更好的辦法,像... where pk >=100000 and pk <= 199999

如果Primary key不能分成數,使用Join

select field1,field2... from tbname tb1,(select pk from tbname limit 100000 offset 100000)tb2 where tb1.pk = tb2.pk

使用Primary key搜索記錄比TABLE FULL SCAN更好;

+0

謝謝。 但我有3個字段的複合主鍵 – ALWAN

+0

@ALWAN這個示例僅僅是一個示例,根本原因是表全部掃描,使用主鍵或其他的unque鍵是更好的方法:P –

相關問題