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

Memahami struktur catatan MyISAM

Informasi yang Anda miliki dalam pertanyaan tentang MyISAM tepat sasaran. Namun, saya ingin menjawab dua pertanyaan tambahan Anda:

PERTANYAAN TERBARU

Menurut Buku

Bab 10 :"Mesin Penyimpanan" Halaman 196 Paragraf 7 mengatakan

Berdasarkan paragraf tersebut, record lama akan ditimpa dengan data linkage hanya jika data baru yang dimasukkan tidak dapat masuk ke blok yang dialokasikan sebelumnya. Hal ini dapat mengakibatkan banyak baris membengkak.

PERTANYAAN TAMBAHAN

Dari jawaban saya sebelumnya, akan ada banyak blok yang memiliki

  • blok ruang
  • panjang rekaman
  • jumlah byte yang tidak digunakan dalam blok
  • Tanda indikator nilai NULL
  • mungkin penunjuk ke kelanjutan catatan jika catatan tidak sesuai dengan ruang yang dibuat sebelumnya dan harus dipisah

Tautan rekaman seperti itu akan dimulai di depan setiap baris yang memasukkan data berukuran besar. Ini dapat mengasapi tabel MyISAM .MYD file dengan sangat cepat.

Saran

Format baris default dari MyISAM adalah Dinamis. Ketika tabel Dinamis dan mengalami banyak INSERT, UPDATE, dan DELETE, tabel seperti itu perlu dioptimalkan dengan

OPTIMIZE TABLE mytable;

Ada alternatif:alihkan format baris tabel ke Tetap. Dengan begitu, semua baris berukuran sama. Ini adalah bagaimana Anda membuat format baris Tetap:

ALTER TABLE mytable ROW_FORMAT=Fixed;

Bahkan dengan Format Baris Tetap, waktu harus diambil untuk menemukan catatan yang tersedia tetapi waktunya akan menjadi O(1) waktu pencarian (Dalam istilah awam, akan membutuhkan jumlah waktu yang sama untuk menemukan catatan yang tersedia tidak peduli berapa banyak baris tabel memiliki atau berapa banyak baris yang dihapus). Anda dapat melewati langkah itu dengan mengaktifkan concurrent_insert sebagai berikut:

Tambahkan ini ke my.cnf

[mysqld]
concurrent_insert = 2

Restart MySQL tidak diperlukan. Jalankan saja

mysql> SET GLOBAL concurrent_insert = 2;

Ini akan menyebabkan semua INSERT pergi ke bagian belakang tabel tanpa mencari ruang kosong.

Keuntungan tabel Baris Tetap

  • INSERT, UPDATE, dan DELETE akan lebih cepat
  • PILIH 20-25% lebih cepat

Berikut adalah beberapa posting saya tentang SELECT menjadi lebih cepat untuk Format Baris Diperbaiki

Kerugian tabel Baris Tetap

Biasanya, saat Anda menjalankan ALTER TABLE mytable ROW_FORMAT=Fixed; , tabel dapat tumbuh 80-100%. .MYI file (halaman indeks untuk tabel MyISAM) juga akan tumbuh pada tingkat yang sama.

EPILOG

Jika Anda menginginkan kecepatan untuk tabel MyISAM dan dapat hidup dengan tabel yang lebih besar, saran alternatif saya akan diperlukan. Jika Anda ingin menghemat ruang untuk setiap tabel MyISAM, biarkan format baris apa adanya (Dinamis). Anda harus mengompresi tabel dengan OPTIMIZE TABLE mytable; lebih sering dengan tabel Dinamis.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tambahkan kolom sementara dengan nilai

  2. Menggunakan bulk_update_mappings di SQLAlchemy untuk memperbarui beberapa baris dengan nilai yang berbeda

  3. Perbarui hanya Waktu di bidang DateTime mysql

  4. MySQL – Bagaimana Cara Melepas Tabel Jika Ada di Database?

  5. MYSQL cara membuka kunci tabel jika saya menggunakan perintah LOCK table table_name MENULIS;