Ringkasan Singkat:
(hanya pendapat saya)
- untuk alamat email -
VARCHAR(255)
- untuk nama pengguna -
VARCHAR(100)
atauVARCHAR(255)
- untuk id_username - gunakan
INT
(kecuali jika Anda berencana memiliki lebih dari 2 miliar pengguna di sistem Anda) - nomor telepon -
INT
atauVARCHAR
atau mungkinCHAR
(tergantung apakah Anda ingin menyimpan pemformatan) - postingan -
TEXT
- tanggal -
DATE
atauDATETIME
(pastikan sertakan waktu untuk hal-hal seperti pos atau email) - uang -
DECIMAL(11,2)
- 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: