Saya memiliki beberapa bidang untuk tabel saya yang bersifat string dan saat ini, sebagian besar ukuran bidang memiliki batas karakter yang cukup tinggi. Misalnya, 100 karakter untuk nama jalan. Apakah ada penalti untuk menggunakan ukuran bidang yang besar? Misalnya, jika saya mengubah batas menjadi 30 karakter untuk bidang ini, apakah akan ada peningkatan kinerja atau efisiensi dengan ukuran? Akan ada sekitar 50 bidang yang bisa menjadi kandidat susut.
Terima kasih atas saran Anda.
Jawaban:
Jika Anda berbicara tentang
varchar
dannvarchar
kemudian tidak, tidak ada penalti untuk mengizinkan panjang bidang yang lebih tinggi.Beberapa peringatan yang perlu diingat, meskipun:
CHAR
.Varchar(2)
misalnya benar-benar menggunakan antara 2-4 byte per baris, sementaraCHAR(2)
selalu menggunakan 2.sumber
Jika Anda maksudkan, "Apakah ada penalti untuk mendeklarasikan ukuran bidang yang lebih besar daripada nilai apa pun yang sebenarnya disimpan di dalamnya?", Maka selama dinyatakan sebagai varchar, jawabannya adalah tidak. Setiap mesin SQL DB yang saya tahu menyimpan hanya jumlah karakter yang benar-benar diberikan dalam data (ditambah nilai panjang). Jadi jika Anda mendefinisikan bidang sebagai varchar (100) tetapi hanya menyimpan 10 karakter di dalamnya, maka hanya akan memakan 10 karakter pada disk (ditambah 2 byte atau lebih untuk panjangnya). Ketika ragu, saya secara rutin membuat bidang varchar saya sangat besar.
Jika maksud Anda, "Apakah ada penalti untuk menyimpan bidang karakter yang panjang," jawabannya adalah ya. Ruang disk saat ini murah, tetapi tidak gratis, jadi Anda tidak ingin menyia-nyiakannya tanpa alasan. Mungkin lebih penting, butuh waktu untuk membaca data dari disk, jadi semakin lama bidang data Anda, semakin lambat programnya. Jika bidang diindeks, ini benar-benar dapat memperlambat pengambilan Anda, karena setiap pembacaan harus membandingkan nilai kunci terhadap bidang panjang yang besar ini.
Ingatlah bahwa jika Anda memberikan bidang entri data besar kepada pengguna, mereka akan menggunakannya, cepat atau lambat.
Semua yang dikatakan, saya akan melakukan kesalahan pada sisi terlalu besar daripada terlalu kecil. Ruang disk cukup murah sehingga Anda tidak ingin memaksa pengguna untuk membuat singkatan dengan cepat karena mereka tidak dapat memasukkan data nyata ke dalam bidang yang tersedia. Sistem yang saya kerjakan hari ini memiliki bidang deskripsi produk yang terlalu kecil untuk banyak nama asli produk kami, jadi pengguna harus menyingkat. Dan tentu saja setiap pengguna menyingkat secara berbeda, jadi kami memiliki dua puluh cara berbeda untuk mengatakan hal yang sama.
sumber
Siapa pun yang mengklaim bahwa tidak ada penalti untuk menyatakan ukuran bidang yang lebih besar dari apa yang sebenarnya akan disimpan dalam tabel adalah salah. Ukuran sebenarnya dari data (ditambah overhead 2 byte) adalah yang sebenarnya disimpan, tetapi definisi kolom itulah yang digunakan untuk menentukan estimasi sejauh rencana eksekusi berjalan. Jadi, ketika mendeklarasikan varchar (1000) untuk menyimpan nilai 10 karakter hanya akan memakan 12 karakter ruang disk, perkiraan rencana eksekusi akan jauh lebih efisien dan negatif untuk hasil yang miring, baik untuk berapa banyak memori untuk memberikan operasi dan apakah operasi dapat dilakukan hanya dalam memori atau apakah itu akan memerlukan ruang drive tempdb juga. Anda dapat membuat kolom Anda varchar (1000), tetapi mesin tidak tahu bahwa semua nilai tersimpan Anda benar-benar kurang dari varchar (10),
sumber
Pemeriksaan panjang lapangan adalah sesuatu yang Anda dapatkan 'gratis', artinya Anda tidak harus menggunakan
CHECK
kendala untuk melakukan hal yang sama. Dan Anda tidak ingin nilai data yang terlalu besar ketika, misalnya, Anda harus mengunggah data Anda ke basis data lain yang telah membatasi elemen data yang sama hingga 35 karakter sesuai dengan alamat standar internasional.sumber