Pertanyaan Memindahkan jutaan catatan dari tabel MEMORY ke meja MYISAM


Saya mencari cara cepat untuk memindahkan catatan dari tabel MEMORI ke meja MYISAM. Tabel MEMORY memiliki sekitar 0,5 juta catatan. Kedua tabel memiliki struktur yang persis sama (jumlah kolom yang sama, tipe data, dll.). Tetapi tabel MYISAM diindeks (B-TREE) pada beberapa kolom. Ada sekitar 25 kolom yang sebagian besar adalah bilangan bulat yang tidak ditandatangani.

Saya sudah mencoba menggunakan "INSERT INTO SELECT * FROM" query. Tetapi apakah ada cara yang lebih cepat untuk melakukan ini?

Hargai bantuan Anda.

Prashant


5
2018-04-13 09:19


asal


Jawaban:


Yang lain menunjukkan - Anda tidak boleh menggunakan indeks selama menyisipkan. Anda dapat menonaktifkan pembaruan pada setiap sisipan:

ALTER TABLE table DISABLE KEYS;
INSERT INTO table
ALTER TABLE tbl_name ENABLE KEYS;

Dan juga mengunci tabel untuk mendapatkan indeks tunggal:

LOCK TABLES table WRITE;
INSERT INTO table
UNLOCK TABLES;

Lagi pula, jika Anda menggunakannya dalam satu INSERT ... SELECT Anda mungkin tidak mendapatkan peningkatan kinerja yang signifikan.

Anda juga dapat mengaturnya bulk_insert_buffer_size pengaturan di konfigurasi server.

Lebih lanjut tentang: http://dev.mysql.com/doc/refman/5.0/en/insert-speed.html


1
2018-04-13 16:06



Pada prinsipnya, Anda harus mendapatkan kinerja yang baik dengan:

  1. Buat tabel target tanpa indeks sekunder.

  2. Urutkan isi dari tabel sumber pada kunci primer tabel target.

  3. Masukkan catatan yang diurutkan ke dalam tabel target.

  4. Tambahkan indeks sekunder satu per satu.


0
2018-04-13 10:03



Ini mungkin sebagian besar tentang penyetelan. Apakah tabel MyISAM awalnya kosong? Jika demikian, Anda dapat melakukan beberapa cheat - menonaktifkan indeks selama pemuatan, lalu mengaktifkannya (ini BUKAN merupakan ide yang bagus pada tabel yang tidak kosong).

Melakukan ORDER BY pada tabel memori bukanlah ide yang sangat bagus, karena mereka biasanya menggunakan indeks hash, sehingga tidak dapat melakukan scan indeks dalam pesanan, sehingga akan memperkenalkan file tambahan (), yang mungkin buruk.


0
2018-04-13 14:37