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

MySQL tidak memperbarui information_schema, kecuali saya menjalankan ANALYZE TABLE `myTable` . secara manual

T: Mengapa MySQL tidak memperbarui information_schema secara otomatis, dan bagaimana cara memperbaiki perilaku ini?

J: InnoDB menyimpan nilai auto_increment dalam memori, dan tidak menyimpannya ke disk.

Perilaku kueri metadata (mis. SHOW TABLE STATUS ) dipengaruhi oleh pengaturan innodb_stats_on_metadata dan innodb_stats_persistent variabel.

https://dev.mysql.com/doc /refman/8.0/en/innodb-parameters.html#sysvar_innodb_stats_on_metadata

Memaksa ANALYZE setiap kali kami meminta metadata dapat menguras kinerja.

Selain pengaturan variabel tersebut, atau memaksa statistik untuk dikumpulkan dengan menjalankan ANALYZE TABLE secara manual , saya rasa tidak ada "perbaikan" untuk masalah ini.

(Saya pikir itu sebagian besar karena menurut saya itu bukan masalah yang perlu diperbaiki.)

Untuk mendapatkan nilai tertinggi dari kolom auto_increment dalam sebuah tabel, pola normatifnya adalah:

 SELECT MAX(`ai_col`) FROM `myschema`.`mytable`

Yang membingungkan saya adalah mengapa kita perlu mengambil kembali informasi khusus ini. Untuk apa kita akan menggunakannya?

Tentu saja, kita tidak akan menggunakannya dalam kode aplikasi untuk menentukan nilai yang ditetapkan ke baris yang baru saja kita sisipkan. Tidak ada jaminan bahwa nilai tertinggi bukan dari baris yang disisipkan oleh sesi lain. Dan kami memiliki LAST_INSERT_ID() mekanisme untuk mengambil nilai dari baris yang baru saja dimasukkan sesi kami.

Jika kita menggunakan ANALYZE TABLE untuk menyegarkan statistik, masih ada sedikit waktu antara itu dan SELECT berikutnya ... sesi lain bisa tergelincir di INSERT lain sehingga nilai yang kami dapatkan dari statistik pengumpulan bisa menjadi "kedaluwarsa" pada saat kami mengambilnya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Bagaimana cara MEMESAN BERDASARKAN RELEVANSI? Tabel INNODB

  2. MENGGUNAKAN klausa Kata Kunci vs ON - MYSQL

  3. MySQL - Dapatkan nomor baris di pilih

  4. PHP dan MySQL Kurangi Detik Dari Waktu

  5. Host tidak diizinkan untuk terhubung ke server MySQL ini untuk aplikasi client-server