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

Bagaimana cara memilih tipe data yang dioptimalkan untuk kolom [khusus innodb]?

Ringkasan Singkat:

(hanya pendapat saya)

  1. untuk alamat email - VARCHAR(255)
  2. untuk nama pengguna - VARCHAR(100) atau VARCHAR(255)
  3. untuk id_username - gunakan INT (kecuali jika Anda berencana memiliki lebih dari 2 miliar pengguna di sistem Anda)
  4. nomor telepon - INT atau VARCHAR atau mungkin CHAR (tergantung apakah Anda ingin menyimpan pemformatan)
  5. postingan - TEXT
  6. tanggal - DATE atau DATETIME (pastikan sertakan waktu untuk hal-hal seperti pos atau email)
  7. uang - DECIMAL(11,2)
  8. lain-lain - lihat di bawah

Sejauh menggunakan InnoDB karena VARCHAR seharusnya lebih cepat, saya tidak akan khawatir tentang itu, atau kecepatan secara umum. Gunakan InnoDB karena Anda perlu melakukan transaksi dan/atau Anda ingin menggunakan batasan kunci asing (FK) untuk integritas data. Juga, InnoDB menggunakan penguncian tingkat baris sedangkan MyISAM hanya menggunakan penguncian tingkat tabel. Oleh karena itu, InnoDB dapat menangani tingkat konkurensi yang lebih tinggi dengan lebih baik daripada MyISAM. Gunakan MyISAM untuk menggunakan indeks teks lengkap dan untuk sedikit overhead.

Lebih penting untuk kecepatan daripada jenis mesin:letakkan indeks pada kolom yang perlu Anda cari dengan cepat. Selalu letakkan indeks di kolom ID/PK Anda, seperti id_username yang saya sebutkan.

Detail selengkapnya:

Berikut adalah sekumpulan pertanyaan tentang tipe data MySQL dan desain database (peringatan, lebih dari yang Anda minta):

Dan beberapa pertanyaan tentang kapan harus menggunakan mesin InnoDB:

Saya hanya menggunakan tinyint untuk hampir semua hal (serius).

Edit - Cara menyimpan "pos:"

Di bawah ini adalah beberapa tautan dengan detail lebih lanjut, tetapi inilah versi singkatnya. Untuk menyimpan "postingan", Anda memerlukan ruang untuk string teks yang panjang. CHAR panjang maksimal adalah 255, jadi itu bukan pilihan, dan tentu saja CHAR akan membuang karakter yang tidak digunakan versus VARCHAR , yang merupakan panjang variabel CHAR .

Sebelum MySQL 5.0.3, VARCHAR panjang maksimum adalah 255, jadi Anda akan memiliki TEXT . Namun, di versi MySQL yang lebih baru, Anda dapat menggunakan VARCHAR atau TEXT . Pilihannya tergantung pada preferensi, tetapi ada beberapa perbedaan. VARCHAR dan TEXT panjang maksimum sekarang menjadi 65.535, tetapi Anda dapat mengatur maksimum Anda sendiri di VARCHAR . Katakanlah Anda berpikir posting Anda hanya perlu 2000 maks, Anda dapat mengatur VARCHAR(2000) . Jika Anda setiap mencapai batas, Anda dapat ALTER Anda tabel nanti dan menabraknya ke VARCHAR(3000) . Sebaliknya, TEXT sebenarnya menyimpan datanya dalam BLOB (1). Saya mendengar bahwa mungkin ada perbedaan kinerja antara VARCHAR dan TEXT , tetapi saya belum melihat bukti apa pun, jadi Anda mungkin ingin memeriksanya lebih lanjut, tetapi Anda selalu dapat mengubah detail kecil itu di masa mendatang.

Lebih penting lagi, cari kolom "posting" ini menggunakan Indeks Teks Lengkap alih-alih LIKE akan jauh lebih cepat (2). Namun, Anda harus menggunakan mesin MyISAM untuk menggunakan indeks teks lengkap karena InnoDB tidak mendukungnya . Dalam database MySQL, Anda dapat memiliki campuran mesin yang heterogen untuk setiap tabel, jadi Anda hanya perlu membuat tabel "postingan" Anda menggunakan MyISAM. Namun, jika Anda benar-benar membutuhkan "postingan" untuk menggunakan InnoDB (untuk transaksi), maka siapkan pemicu untuk memperbarui salinan MyISAM dari tabel "postingan" Anda dan gunakan salinan MyISAM untuk semua pencarian teks lengkap Anda.

Lihat bagian bawah untuk beberapa kutipan berguna.

Terakhir, inilah postingan bagus tentang pro dan kontra VARCHAR versus TEXT. Ini juga berbicara tentang masalah kinerja:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membandingkan Solusi Replikasi Dari Oracle dan MySQL

  2. Hibernate OnDelete Cascade tidak berfungsi untuk MySql tetapi Bekerja pada postgres dan Ms-Sql

  3. Membangun aplikasi Android untuk menjalankan PHP dan MySQL di Tablet Android

  4. Bantuan MySQL:Bagaimana menemukan semua pesanan dari pelanggan sampai harga <=20 dan status='belum dibayar'

  5. bagaimana cara menggunakan kembali kunci utama yang dihapus di mysql?