Apakah ada gunanya kolom VARCHAR yang terlalu kecil?

18

Googling di sekitar sana tampaknya laporan campuran apakah ukuran VARCHAR2kolom di Oracle berdampak pada kinerja atau tidak.

Saya ingin memberikan pertanyaan tentang VARCHARukuran twist kecil dan berharap untuk mendapatkan beberapa wawasan tentang ini:

Diberikan (multiline) bidang teks bebas ( bukan hal pendek seperti nama) yang ingin Anda simpan dalam database (Oracle), apakah ada gunanya (kinerja wrt. Atau sebaliknya) dalam tidak memaksimalkan VARCHARkapasitas ( VARCHAR2(4000)pada Oracle) tetapi memilih nilai yang lebih kecil seperti 1024 atau 512 karena itu kemungkinan akan cukup dalam 98% kasus.

Martin
sumber
Terkait, ajukan pertanyaan Tom
Vadzim

Jawaban:

12

Itu berdampak penggunaan memori, terutama ketika program klien harus mengalokasikan cukup memori untuk menerima dataset.

Ingatlah bahwa banyak aplikasi (terutama aplikasi web) menggunakan UTF-8 yang merupakan rangkaian karakter multi-byte. Karena itu, Anda harus benar-benar mempertimbangkan karakter daripada byte.

Jika saya mengharapkan lebih dari seribu karakter, maka saya akan secara aktif mempertimbangkan CLOB. Saya akan berpikir tentang apakah itu akan menyimpan teks biasa atau beberapa bentuk markup (wiki / html?), Penggunaan dengan bahasa non-Euro. Pertanyaan dan Jawaban di sini, misalnya, adalah CLOB, tetapi komentar dapat ditampung dalam VARCHAR.

Jika Anda memaksimalkan VARCHAR, maka dalam enam bulan seseorang akan ingin membuatnya lebih besar lagi, dan Anda akan menendang diri sendiri karena tidak menggunakan CLOB.

Gary
sumber
2
UTF-8 umumnya akan menggunakan satu byte untuk satu karakter untuk bahasa barat. Ini multi-byte dalam arti memungkinkan urutan multi-byte "escape" untuk mewakili karakter non-Barat.
Eric J.
9

Secara umum tidak ada pertimbangan kinerja meskipun ada masalah sampingan yang mungkin penting bagi Anda. Batas untuk varcharharus dianggap sebagai kendala seperti yang lain - itu ada untuk menegakkan aturan bisnis.

IMO pertanyaan yang harus Anda tanyakan adalah "Apakah saya ingin mencegah data teks bebas yang disimpan dalam bidang ini lebih panjang dari n byte / karakter" - itu adalah satu-satunya faktor penentu ketika memilih antara varchar(512)dan varchar(4000).

Perhatikan bahwa saya berasumsi Anda berbicara tentang varchartipe SQL - situasinya berbeda dengan pl/sqldan memilih panjangnya dapat menjadi penting karena alasan alokasi memori.

Jack Douglas
sumber
Terima kasih. Sejauh pengalaman saya (sangat terbatas), "aturan bisnis" yang menyatakan batas antara "500 - 3999" hanyalah sewenang-wenang, yaitu, seseorang hanya menyukai nomornya. IMHO, jika saya menggunakan teks bebas dan tidak ada konsekuensi implementasi (konteks dari pertanyaan ini), baik maksinya (4000) atau bukan teks bebas. --- Poin yang saya coba sampaikan dalam komentar ini: Saya pikir tidak akan pernah ada aturan bisnis yang membantu memilih btw. 512 dan 4000 (kecuali: "sebanyak mungkin karakter")
Martin
Jika benar-benar "sebanyak karakter", maka seperti yang dikatakan @gary, Anda harus mempertimbangkan clob, bukan?
Jack Douglas
4

Jika nilai yang lebih kecil akan bekerja untuk 98% kasus, tetapi dibutuhkan Varchar2 (4000) untuk bekerja untuk 100% kasus, maka Anda memiliki sedikit pilihan selain menggunakan nilai yang lebih besar . Membuat tabel terpisah untuk 2% dari nilai-nilai dan kemudian mengoordinasikan sisipan / pilih dll. Akan menambah kompleksitas yang akan melenyapkan setiap memori atau manfaat kinerja dari tidak memperluas bidang.

Leigh Riffel
sumber