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

Apakah ada kerugian menggunakan varchar (255) generik untuk semua bidang berbasis teks?

Dalam penyimpanan, VARCHAR(255) cukup pintar untuk menyimpan hanya panjang yang Anda butuhkan pada baris tertentu, tidak seperti CHAR(255) yang akan selalu menyimpan 255 karakter.

Tetapi karena Anda menandai pertanyaan ini dengan MySQL, saya akan menyebutkan tip khusus MySQL:karena baris disalin dari lapisan mesin penyimpanan ke lapisan SQL, VARCHAR bidang dikonversi ke CHAR untuk mendapatkan keuntungan bekerja dengan baris dengan lebar tetap. Jadi string dalam memori menjadi mengisi hingga panjang maksimum dari VARCHAR yang Anda nyatakan kolom.

Saat kueri Anda secara implisit menghasilkan tabel sementara, misalnya saat menyortir atau GROUP BY , ini dapat menggunakan banyak memori. Jika Anda menggunakan banyak VARCHAR(255) kolom untuk data yang tidak perlu terlalu panjang, ini bisa membuat tabel sementara menjadi sangat besar.

Anda mungkin juga ingin mengetahui bahwa perilaku "mengisi" ini berarti bahwa string yang dideklarasikan dengan set karakter utf8 menghasilkan tiga byte per karakter bahkan untuk string yang Anda simpan dengan konten byte tunggal (mis. karakter ascii atau latin1). Begitu juga set karakter utf8mb4 menyebabkan string menjadi empat byte per karakter di memori.

Jadi VARCHAR(255) di utf8 menyimpan string pendek seperti "No opinion" membutuhkan 11 byte pada disk (sepuluh karakter dengan karakter lebih rendah, ditambah satu byte untuk panjangnya) tetapi membutuhkan 765 byte dalam memori, dan dengan demikian dalam tabel temp atau hasil yang diurutkan.

Saya telah membantu pengguna MySQL yang tanpa sadar sering membuat tabel temp 1,5GB dan mengisi ruang disk mereka. Mereka memiliki banyak VARCHAR(255) kolom yang dalam praktiknya menyimpan string yang sangat pendek.

Sebaiknya tentukan kolom berdasarkan tipe data yang ingin Anda simpan. Ini memiliki manfaat untuk menegakkan batasan terkait aplikasi, seperti yang disebutkan orang lain. Tetapi memiliki manfaat fisik untuk menghindari pemborosan memori yang saya jelaskan di atas.

Tentu saja sulit untuk mengetahui apa alamat pos terpanjang, itulah sebabnya banyak orang memilih VARCHAR yang panjang. yang tentunya lebih panjang dari alamat manapun. Dan 255 biasa karena merupakan panjang maksimum VARCHAR yang panjangnya dapat dikodekan dengan satu byte. Itu juga maksimum VARCHAR panjang di MySQL lebih tua dari 5.0.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak ada koneksi yang dapat dibuat karena mesin target secara aktif menolaknya (PHP / WAMP)

  2. Skrip Pemeriksaan Kesehatan Replikasi MySQL

  3. ERROR 1130 (HY000):Host '' tidak diizinkan untuk terhubung ke server MySQL ini

  4. Mengukur waktu kueri MySQL yang sebenarnya

  5. Hibernate:Buat tabel Mysql InnoDB alih-alih MyISAM