Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL menonaktifkan &mengaktifkan kunci

Anda pasti harus memilih pendekatan berdasarkan jenis mesin... mengoptimalkan untuk MyISAM atau untuk InnoDB .

Kami baru-baru ini menjalankan benchmark yang membandingkan berbagai cara untuk memasukkan data dan mengukur waktu dari sebelum penyisipan dan hingga semua indeks dipulihkan sepenuhnya. Itu ada di meja kosong, tapi kami menggunakan hingga 10 juta baris.

MyISAM dengan LOAD DATA INFILE dan ALTER TABLE ... ENABLE/DISABLE KEYS menang telak dalam pengujian kami (pada sistem Windows 7, MySQL 5.5.27 - sekarang kami mencobanya pada sistem Linux).

AKTIFKAN dan NONAKTIFKAN KUNCI tidak berfungsi untuk InnoDB, itu hanya MyISAM. Untuk InnoDB, gunakan SET AUTOCOMMIT = 0; SET FOREIGN_KEY_CHECKS = 0; SET UNIQUE_CHECKS = 0; jika Anda yakin data Anda tidak mengandung duplikat (jangan lupa set ke 1 setelah pengunggahan selesai).

Saya rasa Anda tidak perlu OPTIMIZE TABLE setelah penyisipan massal - baris MySQL dipesan dengan penyisipan dan indeks tetap dibangun kembali. Tidak ada "fragmentasi ekstra" dengan melakukan penyisipan massal.

Jangan ragu untuk berkomentar jika saya membuat kesalahan faktual.

PERBARUI: Menurut hasil pengujian kami yang lebih baru dan lengkap, saran untuk kunci NONAKTIF / AKTIFKAN salah.

Seorang rekan kerja memiliki program yang menjalankan beberapa pengujian berbeda - tabel dengan InnoDB / MyISAM yang telah diisi sebelumnya dan kosong, kecepatan pemilihan dan penyisipan dengan LOAD DATA LOCAL , INSERT INTO , REPLACE INTO dan UPDATE , pada tabel "padat" dan "terfragmentasi" (saya tidak begitu yakin bagaimana caranya, saya pikir itu sejalan dengan DELETE FROM ... ORDER BY RAND() LIMIT ... dengan benih tetap sehingga masih sebanding) dan indeks yang diaktifkan dan dinonaktifkan.

Kami mengujinya dengan banyak versi MySQL yang berbeda (5.0.27, 5.0.96, 5.1.something, 5.5.27, 5.6.2) pada Windows dan Linux (meskipun bukan versi yang sama pada kedua OS). MyISAM hanya menang saat meja kosong. InnoDB lebih cepat ketika data sudah ada dan umumnya berkinerja lebih baik (kecuali untuk ruang hdd - MyISAM lebih kecil pada disk).

Namun, untuk benar-benar memanfaatkannya, Anda harus mengujinya sendiri - dengan versi yang berbeda, pengaturan konfigurasi yang berbeda, dan banyak kesabaran - terutama mengenai inkonsistensi yang aneh (5.0.97 jauh lebih cepat daripada 5.5.27 dengan konfigurasi yang sama - kami 'masih mencari penyebabnya). Yang kami temukan adalah DISABLE KEYS dan ENABLE KEYS hampir tidak berharga dan terkadang berbahaya jika Anda tidak memulai dengan meja kosong.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara tercepat untuk mengimpor file CSV besar ke MySql menggunakan MySql CLI

  2. Perbarui kunci utama Django MySQL

  3. Mencoba mendapatkan properti non-objek - CodeIgniter

  4. MySQL – Cara Menghasilkan Angka Acak

  5. Bagaimana cara memaksa nama tabel peka huruf besar-kecil?