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

Bergabung dengan tabel InnoDB dengan tabel MyISAM

Apa yang langsung muncul pada saya adalah MyISAM .

ASPECT #1 :GABUNG itu sendiri

Setiap kali ada gabungan yang melibatkan MyISAM dan InnoDB, tabel InnoDB akan berakhir dengan perilaku penguncian tingkat tabel alih-alih penguncian tingkat baris karena keterlibatan MyISAM dalam kueri dan MVCC tidak dapat diterapkan ke data MyISAM. MVCC bahkan tidak dapat diterapkan ke InnoDB dalam beberapa kasus.

ASPECT #2 :Keterlibatan MyISAM

Dari perspektif lain, jika ada tabel MyISAM yang diperbarui melalui INSERT, UPDATE, atau DELETE, tabel MyISAM yang terlibat dalam kueri GABUNG akan dikunci dari Koneksi DB lain dan kueri GABUNG harus menunggu hingga tabel MyISAM dapat dibaca. Sayangnya, jika ada campuran InnoDB dan MyISAM dalam kueri GABUNG, tabel InnoDB harus mengalami penguncian yang terputus-putus seperti mitra MyISAM-nya dalam kueri GABUNG karena tertahan dari penulisan.

Ingatlah bahwa MVCC akan tetap mengizinkan transaksi READ-UNCOMMITTED dan REPEATABLE-READ untuk bekerja dengan baik dan biarkan transaksi tertentu tampilan data tersedia untuk transaksi lain. Saya tidak bisa mengatakan hal yang sama untuk READ-COMMITTED dan SERIALIZABLE .

ASPEK #3 :Pengoptimal Kueri

MySQL bergantung pada kardinalitas indeks untuk menentukan rencana EXPLAIN yang dioptimalkan. Kardinalitas indeks stabil di tabel MyISAM sampai banyak INSERT, UPDATE, dan DELETE terjadi pada tabel, yang dengannya Anda dapat menjalankan OPTIMIZE TABLE secara berkala terhadap tabel MyISAM. Kardinalitas indeks InnoDB TIDAK PERNAH STABIL !!! Jika Anda menjalankan SHOW INDEXES FROM *innodbtable*; , Anda akan melihat kardinalitas indeks berubah setiap kali Anda menjalankan perintah itu. Itu karena InnoDB akan melakukan penyelaman ke dalam indeks untuk memperkirakan kardinalitas. Bahkan jika Anda menjalankan OPTIMIZE TABLE terhadap tabel InnoDB, itu hanya akan mendefrag tabel. OPTIMIZE TABLE akan menjalankan ANALYZE TABLE internal untuk menghasilkan statistik indeks terhadap tabel. Itu berfungsi untuk MyISAM. InnoDB mengabaikannya.

Saran saya untuk Anda adalah berusaha sekuat tenaga dan mengonversi semuanya ke InnoDB dan mengoptimalkan pengaturan Anda sesuai dengan itu.

PERBARUI 18-12-2012 15:56 EDT

Percaya atau tidak, masih membuka tiket untuk bergabung dengan InnoDB/MyISAM selama PILIH UNTUK PEMBARUAN . Jika Anda membacanya, itu merangkum resolusi sebagai berikut:JANGAN LAKUKAN !!! .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan fungsi password_hash dan password_verify PHP 5.5

  2. Laravel - cara memperbarui seluruh koleksi

  3. Jatuhkan beberapa tabel dalam satu kesempatan di MySQL

  4. Cara terbaik untuk menghindari entri duplikat ke database mysql

  5. Daftar Istilah Database DevOps untuk Pemula MySQL