2017-09-22 2 views
0

verschiebe ich habe eine große Tabelle über 200.000.000 Zeile MYISAM mit einem zusammengesetzten Primärschlüssel , aber ich habe keinen Index.Wie man Daten von Tabelle zu einem anderen in Mysql große Tabelle

und ich mag einen Index erstellen, aber die Probleme sind, dass der Tabellen-Server unterbrochen wird, wenn ich die Add-Index Anfrage ausführen:

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

So will ich eine neue Tabelle erstellen und benötigten Index und bewegen konfiguriere Daten in die neue Tabelle und benennen Sie sie um.

habe ich versucht, diese 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 

Aber wenn der Offset werden mehr als 100 Millionen der Abfragezeile Reaktion langsamer geworden.

Gibt es noch eine andere Lösung?

tahnks

Antwort

1

Verwenden limit 100000 offset 100000 ; bedeutet, dass MySQL die 100000 Datensätze und erhalten den Datensatz aus 100001 gesucht;

Suchen Sie die 100000 Datensätze ist TABELLE FULL SCAN, so ist es sehr langsam;

Verwendung Primary key ist besser Weg zu suchen, wie ... where pk >=100000 and pk <= 199999

Wenn Primary key nicht in Anzahl geteilt können, Join

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

Verwendung Primary key verwenden die Platte ist besser als TABLE FULL SCAN suchen;

+0

Danke. aber ich habe einen zusammengesetzten Primärschlüssel aus 3 Feldern – ALWAN

+0

@ALWAN Dieses Beispiel ist nur ein Beispiel, Grundursache ist Tabelle voller Scan, verwenden Primärschlüssel oder andere unque Schlüssel ist besser Weg: P –

Verwandte Themen