Portál AbcLinuxu, 8. května 2025 21:13
TRUNCATE TABLE main_tab INSERT INTO main_tab SELECT * FROM tab1 mysqlcheck -o mojadatabaza main_tab -u root --password=xxxxx INSERT INTO main_tab SELECT * FROM tab2 mysqlcheck -o mojadatabaza main_tab -u root --password=xxxxx INSERT INTO main_tab SELECT * FROM tab3 mysqlcheck -o mojadatabaza main_tab -u root --password=xxxxx ... INSERT INTO main_tab SELECT * FROM tab10jedna tab má cca. 600 tisíc riadkov a 60MB Insert prvých 5 tab prebehne v poriadku a potom to už je jedna katastrófa, všetko sa úplne spomali a strašne dlho to trvá, kým sa vložia ostatné tab do main_tab. Najhoršie je, že pri tom sa odstavý celý web server. Neviete prosím poradiť, ako by som to mohol vyriešiť?
Řešení dotazu:
TRUNCATE TABLE main_tab; DROP INDEX pro_všechny_indexy ON main_tab; SELECT * FROM tab1 INTO OUTFILE '/path/tab1.txt'; ... SELECT * FROM tabN INTO OUTFILE '/path/tabN.txt'; LOAD DATA INFILE '/path/tab1.txt' INTO TABLE main_tab; ... LOAD DATA INFILE '/path/tabN.txt' INTO TABLE main_tab; CREATE INDEX [UNIQUE] pro_všechny_indexy ON main_tab;…a nezapomenout soubory smazat, obecně to bude asi nejrychlejší.
LOAD DATA INFILE
můžete zaměnit za mysqlimport
, kde můžete zadat všechny soubory naráz.TRUNCATE + DROP INDEX
použít DROP TABLE
, CREATE TABLE
jen s primárním indexem, nahrnout data a CREATE INDEX
pro potřebné indexy.
temp_main_tab
a:
... DROP TABLE main_tab; RENAME TABLE temp_main_tab TO main_tab;.. ale to už je len taká drobnosť.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.