Mengoptimumkan Import Data MySQL menggunakan Muatkan Data Infile
Mengimport set data yang besar ke dalam jadual MySQL boleh menjadi tugas yang memakan masa. Apabila menggunakan perintah "Muat data dalam fail...", mengimbangi kelajuan dan integriti data boleh menjadi mencabar. Soalan ini meneroka cara untuk meningkatkan prestasi import sedemikian, terutamanya untuk jadual dengan kunci.
Meningkatkan Kelajuan Import
Kebimbangan utama yang dinyatakan dalam soalan ialah kunci perlahan penciptaan selepas mengimport data tanpa kunci. Untuk menangani perkara ini:
-
Isih Fail CSV: Susun data dalam fail CSV dalam susunan kunci utama jadual. Ini membantu Innodb menggunakan struktur kunci utama berkelompoknya untuk pemuatan yang lebih pantas.
-
Lumpuhkan Kekangan: Lumpuhkan semakan kunci unik dan asing buat sementara waktu untuk mengurangkan overhed semasa pemuatan. Gunakan set arahan unique_checks = 0; dan tetapkan foreign_key_checks = 0;.
-
Lumpuhkan Pengelogan Biner: Matikan pengelogan binari (tetapkan sql_log_bin=0;) untuk memintas pengelogan untuk prestasi yang lebih baik.
-
Split Fail Besar: Bahagikan fail CSV yang besar kepada ketulan yang lebih kecil dan muatkannya secara individu. Ini boleh mengurangkan penggunaan memori dan mempercepatkan proses.
Mempercepatkan Penciptaan Kunci
Selepas memuatkan data, membina semula kunci boleh menjadi operasi yang panjang. Berikut ialah beberapa cadangan:
-
Sisip Pukal: Gunakan klausa INSERT PUKAL dalam penyataan LOAD DATA INFILE untuk mengimport data dengan kunci sekali gus.
-
Indeks Cincang Suaian: Dayakan indeks Cincang Suaian (innodb_adaptive_hash_index=ON) untuk mempercepatkan penciptaan indeks untuk pertanyaan yang kerap digunakan.
-
Pengindeksan Selari: Jika boleh, gunakan pengindeksan selari (innodb_parallel_alter=ON) untuk mencipta berbilang urutan untuk penciptaan indeks, berpotensi mengurangkan masa diambil.
Menamatkan Pertanyaan Lambat
Untuk menamatkan pertanyaan perlahan yang terus berjalan selepas ditamatkan, pertimbangkan:
-
Cuba Semula Menyambung: Putuskan sambungan dan sambung semula ke pelayan MySQL untuk menamatkan sambungan dengan anggun pertanyaan.
-
Gunakan ID Pertanyaan: Kenal pasti ID pertanyaan menggunakan SHOW PROCESSLIST dan bunuhnya menggunakan KILL [QUERY_ID].
-
Mulakan semula MySQL: As langkah terakhir, memulakan semula MySQL akan menamatkan semua pertanyaan yang sedang dijalankan. Walau bagaimanapun, ia boleh menyebabkan gangguan perkhidmatan.
Atas ialah kandungan terperinci Bagaimana untuk Mengoptimumkan Import Data MySQL menggunakan Muatkan Data Infile untuk Jadual dengan Kekunci?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!