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

Haruskah MEDIUMINT dihindari di MySQL?

InnoDB menyimpan MEDIUMINT sebagai nilai tiga byte. Tetapi ketika MySQL harus melakukan perhitungan apa pun, tiga byte MEDIUMINT diubah menjadi delapan byte unsigned long int (saya berasumsi tidak ada yang menjalankan MySQL pada 32 bit saat ini).

Ada pro dan kontra, tetapi Anda mengerti bahwa alasan "Ini bodoh, dan lambat, dan kode yang mengimplementasikannya adalah horor perayapan" bukanlah alasan teknis, bukan?

Saya akan mengatakan MEDIUMINT masuk akal ketika ukuran data pada disk sangat penting. Yaitu. ketika sebuah tabel memiliki begitu banyak catatan sehingga perbedaan satu byte saja (4 byte INT vs 3 byte MEDIUMINT) sangat berarti. Ini agak jarang terjadi, tapi mungkin.

mach_read_from_3 dan mach_read_from_4 - primitif yang digunakan InnoDB untuk membaca angka dari catatan InnoDB serupa. Mereka berdua kembali ulint. Saya yakin Anda tidak akan melihat perbedaan pada apa pun beban kerja.

Lihat saja kodenya:

ulint
mach_read_from_3(
/*=============*/
        const byte*     b)      /*!< in: pointer to 3 bytes */
{
        ut_ad(b);
        return( ((ulint)(b[0]) << 16)
                | ((ulint)(b[1]) << 8)
                | (ulint)(b[2])
                );
}

Apakah menurut Anda ini jauh lebih lambat dari ini?

ulint
mach_read_from_4(
/*=============*/
        const byte*     b)      /*!< in: pointer to four bytes */
{
        ut_ad(b);
        return( ((ulint)(b[0]) << 24)
                | ((ulint)(b[1]) << 16)
                | ((ulint)(b[2]) << 8)
                | (ulint)(b[3])
                );
}


  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 memasukkan catatan untuk setiap hasil dalam kueri SQL?

  2. Apakah saya menggunakan Java PooledConnections dengan benar?

  3. Bandingkan nilai stempel waktu dan tetapkan nilai untuk masing-masing jika ada perubahan

  4. MySQL:memilih baris di mana kolomnya nol

  5. Mysql memperbarui baris dengan nilai baris lain di tabel yang sama