Jika Anda terutama memiliki tabel MyISAM, Anda harus menambah buffer sisipan massal . Inilah yang dikatakan Dokumentasi MySQL tentang pengaturan bulk_insert_buffer_size :
MyISAM menggunakan cache mirip pohon untuk membuat sisipan massal lebih cepat untuk INSERT ... SELECT, INSERT ... VALUES (...), (...), ..., dan LOAD DATA INFILE saat menambahkan data ke nonempty meja. Variabel ini membatasi ukuran pohon cache dalam byte per utas. Menetapkannya ke 0 menonaktifkan pengoptimalan ini. Nilai default adalah 8MB.
Ada dua hal yang perlu Anda lakukan
1) Tambahkan ke /etc/my.cnf
[mysqld]
bulk_insert_buffer_size=512M
2) Tetapkan nilai global untuk itu
SET GLOBAL bulk_insert_buffer_size = 1024 * 1024 * 512;
Jika Anda tidak memiliki hak istimewa untuk mengatur bulk_insert_buffer_size secara global, maka lakukan ini
service mysql restart
Tentu saja, ini bukan untuk InnoDB.
Dari sudut lain, apakah tabelnya InnoDB atau MyISAM, jika indeks lebih besar dari tabel, Anda mungkin memiliki terlalu banyak indeks. Saya biasanya merasa bahwa pemuatan ulang myISAM mysqldump akan memakan waktu 3 kali selama mysqldump diperlukan. Saya juga memberi tahu bahwa memuat ulang mysqldump InnoDB harus memakan waktu 4 kali lipat selama mysqldump dibuat.
Jika Anda melebihi rasio 4: 1 untuk memuat ulang mysqldump, Anda pasti memiliki satu dari dua masalah:
- indeks terlalu banyak
- indeks terlalu besar karena kolom besar
Anda dapat mengukur ukuran data Anda dengan mesin penyimpanan dengan ini:
SELECT IFNULL(B.engine,'Total') "Storage Engine",
CONCAT(LPAD(REPLACE(FORMAT(B.DSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Data Size", CONCAT(LPAD(REPLACE(
FORMAT(B.ISize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Index Size", CONCAT(LPAD(REPLACE(
FORMAT(B.TSize/POWER(1024,pw),3),',',''),17,' '),' ',
SUBSTR(' KMGTP',pw+1,1),'B') "Table Size" FROM
(SELECT engine,SUM(data_length) DSize,SUM(index_length) ISize,
SUM(data_length+index_length) TSize FROM
information_schema.tables WHERE table_schema NOT IN
('mysql','information_schema','performance_schema') AND
engine IS NOT NULL GROUP BY engine WITH ROLLUP) B,
(SELECT 3 pw) A ORDER BY TSize;
Lihat apakah indeks hampir sebesar data atau bahkan lebih besar
Anda juga dapat mempertimbangkan menonaktifkan pencatatan biner seperti ini:
echo "SET SQL_LOG_BIN=0;" > footable.sql
mysqldump --databases foo >> footable.sql
sebelum memuat ulang skrip