Saya sedang dalam proses membuat tabel dan itu membuat saya bertanya-tanya.
Jika saya menyimpan, katakanlah mobil yang memiliki merek (fx BMW, Audi dll.), Apakah itu akan membuat perbedaan pada kecepatan kueri jika saya menyimpan merek sebagai int atau varchar.
Begitu juga
SELECT * FROM table WHERE make = 5 AND ...;
Lebih cepat / lebih lambat dari
SELECT * FROM table WHERE make = 'audi' AND ...;
atau akankah kecepatannya kurang lebih sama?
sumber
Beberapa tolok ukur kasar:
4 juta catatan di Postgres 9.x
Hasil pada RAM 8GB, i7, laptop SSD:
jadi sepertinya untuk pengaturan ini, selama indeks Anda sesuai dengan RAM, teks bigint vs 16 karakter tidak membuat perbedaan kecepatan.
sumber
Ini akan menjadi sedikit lebih cepat menggunakan int daripada varchar. Yang lebih penting untuk kecepatan adalah memiliki indeks di bidang yang dapat digunakan kueri untuk menemukan rekaman.
Ada alasan lain untuk menggunakan int, dan itu adalah untuk menormalkan database. Alih-alih menyimpan teks 'Mercedes-Benz' ribuan kali di tabel, Anda harus menyimpan id-nya dan menyimpan nama mereknya sekali dalam tabel terpisah.
sumber
Mercedes-Benz
menyimpan ribuan kali id1
. Misalnya tabelcar_brands
, kolomBrands
danId
. BarisMercedes-Benz
dan1
. Dan di kolom tabel utamaBrands
dan nilai1
. Dan ketikaSELECT
, maka pada awalnya mendapatkanId
dari mejacar_brands
dan kemudianSELECT Something FROM main_table WHERE Brands = (SELECT Id FROM car_brands WHERE Brands = Mercedes-Benz)
. Atau pendekatan lain?select something from main_table c inner join car_brands b on b.Id = c.Brands where b.Brands = 'Mercedes-Benz'
.Menguraikan kinerja sebenarnya dari perbandingan string versus non-float, dalam hal ini ukuran apa pun yang tidak ditandatangani dan ditandatangani tidak menjadi masalah. Ukuran sebenarnya adalah perbedaan kinerja yang sebenarnya. Baik itu perbandingan 1byte + (hingga 126bytes) versus 1,2,4 atau 8 byte ... jelas non-float lebih kecil dari string dan float, dan dengan demikian lebih ramah CPU dalam perakitan.
Perbandingan string ke string dalam semua bahasa lebih lambat daripada sesuatu yang dapat dibandingkan dalam 1 instruksi oleh CPU. Bahkan membandingkan 8 byte (64bit) pada CPU 32bit masih lebih cepat daripada VARCHAR (2) atau lebih besar. * Sekali lagi, lihat perakitan yang dihasilkan (bahkan dengan tangan) dibutuhkan lebih banyak instruksi untuk membandingkan karakter demi karakter daripada 1 hingga 8 byte CPU numerik.
Sekarang, seberapa cepat? tergantung juga pada volume data. Jika Anda hanya membandingkan 5 dengan 'audi' - dan hanya itu yang dimiliki DB Anda, perbedaan yang dihasilkan sangat minim sehingga Anda tidak akan pernah melihatnya. Tergantung pada CPU, implementasi (klien / server, web / script, dll) Anda mungkin tidak akan melihatnya sampai Anda mencapai beberapa ratus perbandingan pada server DB (bahkan mungkin beberapa ribu perbandingan sebelum terlihat).
Ozz
sumber
Indeks atau tidak, int jauh lebih cepat (semakin lama varchar, semakin lambat itu).
Alasan lain: indeks di bidang varchar akan jauh lebih besar daripada di int. Untuk tabel yang lebih besar mungkin berarti ratusan megabyte (dan ribuan halaman). Itu membuat kinerja jauh lebih buruk karena membaca indeks saja membutuhkan banyak pembacaan disk.
sumber
Secara umum int akan lebih cepat. Semakin lama varchar semakin lambat
sumber
Petunjuk: Jika nilai yang mungkin untuk field make tidak akan pernah (atau jarang) berubah, Anda dapat menggunakan ENUM sebagai kompromi. Ini menggabungkan kecepatan yang baik dengan keterbacaan yang baik.
sumber
enum
tipe data? Saya pikir itu khusus MySQL.Jika Anda mengaktifkan pengindeksan di salah satu bidang, ini akan lebih cepat. Adapun pertanyaan Anda, saya pikir
int
lebih cepat darivarchar
.sumber
Agak relatif. Ya, INT akan lebih cepat, tetapi pertanyaannya adalah apakah itu terlihat dalam situasi Anda. Apakah VARCHAR hanya berupa kata-kata kecil, atau teks yang lebih panjang? dan berapa baris di tabel? Jika hanya ada beberapa baris, kemungkinan besar akan sepenuhnya di-buffer di memori (jika sering diminta), dalam hal ini Anda tidak akan melihat banyak perbedaan. Lalu tentu saja ada pengindeksan, yang menjadi lebih penting saat tabel tumbuh. Menggunakan SSD mungkin lebih cepat daripada HD dengan kueri yang dioptimalkan. Juga pengontrol disk yang baik terkadang mempercepat kueri> 10x. Ini mungkin menyisakan ruang untuk hanya menggunakan VARCHAR yang membuat kueri membaca dan menulis lebih mudah (tidak perlu menulis gabungan yang rumit) dan mempercepat pengembangan. Namun kaum Puritan tidak akan setuju dan selalu menormalkan segalanya.
sumber