Jawaban spesifik untuk pertanyaan Anda (setidaknya untuk Oracle dan mungkin basis data lainnya) adalah bahwa panjang bidang tidak masalah, hanya panjang data. Namun, ini tidak boleh digunakan sebagai faktor penentu mengenai apakah akan mengatur bidang ke panjang maksimum yang diijinkan atau tidak. Berikut adalah beberapa masalah lain yang harus Anda pertimbangkan sebelum memaksimalkan ukuran bidang.
Memformat
Setiap alat klien yang memformat data berdasarkan ukuran bidang akan memerlukan pertimbangan pemformatan khusus. Oracle SQL * Plus misalnya secara default menampilkan ukuran maksimum kolom Varchar2 bahkan jika datanya hanya satu karakter. Membandingkan…
create table f1 (a varchar2(4000), b varchar2(4000));
create table f2 (a varchar2(5), b varchar2(5));
insert into f1 values ('a','b');
insert into f2 values ('a','b');
select * from f1;
select * from f2;
Bad Data
Field length menyediakan mekanisme tambahan untuk menangkap / mencegah data buruk. Sebuah antarmuka tidak boleh mencoba memasukkan 3000 karakter ke dalam bidang 100 karakter, tetapi jika bidang itu didefinisikan 4000 karakter, mungkin saja. Kesalahan tidak akan tertangkap pada tahap entri data, tetapi sistem mungkin mengalami masalah lebih lanjut ketika aplikasi lain mencoba memproses data dan tersedak. Sebagai contoh, jika Anda kemudian memutuskan untuk mengindeks bidang di Oracle Anda akan melebihi panjang kunci maksimum (tergantung pada ukuran blok dan rangkaian). Lihat…
create index i1 on f1(a);
Memori
Jika aplikasi klien mengalokasikan memori menggunakan ukuran maksimum, aplikasi akan mengalokasikan secara signifikan lebih banyak memori daripada yang diperlukan. Pertimbangan khusus harus dilakukan untuk menghindari hal ini.
Dokumentasi
Ukuran bidang menyediakan titik data dokumentasi tentang data tersebut. Kita bisa memanggil semua tabel t1, t2, t3, dll. Dan semua bidang f1, f2, f3, dll., Tetapi dengan menentukan nama yang bermakna, kita lebih memahami data. Misalnya, jika tabel alamat untuk perusahaan dengan pelanggan di AS memiliki bidang yang disebut Status yang terdiri dari dua karakter, kami berharap singkatan status dua karakter dimasukkan di dalamnya. Di sisi lain, jika bidangnya seratus karakter, kita mungkin mengharapkan nama negara lengkap untuk ditampilkan di bidang tersebut.
Semua yang dikatakan, tampaknya bijaksana untuk dipersiapkan untuk perubahan. Hanya karena semua nama produk Anda hari ini muat dalam 20 karakter tidak berarti mereka akan selalu demikian. Jangan berlebihan dan menghasilkan 1000, tetapi tinggalkan ruang untuk ekspansi yang masuk akal.
Inilah titik awal yang baik untuk Anda.
http://www.sqlskills.com/BLOGS/KIMBERLY/post/Disk-space-is-cheap.aspx
Saya mungkin salah mengerti pertanyaan awal Anda. Biarkan saya melihat apakah saya dapat menemukan Anda beberapa tautan lain untuk referensi.
Berikut ini adalah referensi yang baik untuk pemilihan tipe data: http://sqlfool.com/2009/05/performance-considerations-of-data-types/
Mengubah dari varchar (20) ke varchar (30) mungkin tampak seperti sesuatu yang kecil, tetapi Anda perlu memahami lebih lanjut tentang bagaimana struktur basis data bekerja untuk mengetahui masalah potensial. Misalnya, pergi ke varchar (30) dapat mendorong Anda melewati titik kritis kolom Anda (jika semua 30 byte digunakan) dapat disimpan pada satu halaman (kurang dari 8060 byte). Ini akan menyebabkan peningkatan ruang disk yang digunakan, penurunan kinerja, dan bahkan beberapa overhead tambahan dengan log transaksi Anda.
Berikut ini tautan untuk struktur basis data: http://technet.microsoft.com/en-us/sqlserver/gg313756.aspx
Berikut ini adalah satu untuk pemisahan halaman dan pencatatan trx: http://sqlskills.com/BLOGS/PAUL/post/How-expensive-are-page-splits-in-terms-of-transaction-log.aspx
HTH
sumber
Saya pikir saya akan berbagi poin menarik lainnya, yang saya temukan di SO Pertanyaan berikut:
/programming/148398/are-there-any-disugian-to-always-using-nvarcharmax
Jawaban asli oleh: Nick Kavadias
Saya akan menganggap ini sebagai kerugian besar ketika menambahkan n / varchar (maks) kolom secara sewenang-wenang, dan menurut Situs MS pembatasan ini terhadap melakukan pembangunan kembali indeks online tetap di SQL Server 2008, 2008 R2 dan Denali; jadi tidak spesifik untuk SQL Server 2005.
Terima kasih, Jeff
sumber
Dalam beberapa kasus, jumlah ruang yang Anda alokasikan untuk bidang varchar akan memengaruhi jumlah memori yang dialokasikan untuk jenis memori.
Saya menemukan presentasi di SQLWorkshops.com berpikir, presentasi ini berbicara tentang kasus di mana semacam untuk pesanan tumpah ke tempdb karena tidak cukup memori yang dialokasikan untuk bidang char / varchar.
http://webcasts2.sqlworkshops.com/webcasts.asp
Webcast ini juga disajikan sebagai artikel di situs web berikut:
http://www.mssqltips.com/tip.asp?tip=1955
Perhatikan dalam presentasi ini bahwa kolom yang diurutkan bukan kolom char / varchar, tetapi jumlah ruang yang dialokasikan untuk kolom varchar dalam memori membuat perbedaan dalam kinerja kueri dalam beberapa kasus.
sumber
SET ANSI_PADDING AKTIF?
Anda berakhir dengan banyak jejak spasi ...
sumber
Yang penting hanya terkait dengan ruang disk dan panjang karakter. Tentu saja pencarian pada tipe data char dan indeks pada tipe data ini akan bertindak lebih lambat dari integer tetapi ini adalah diskusi lain.
Tipe data Varchar adalah tipe data "variabel" jadi jika Anda menetapkan batas varchar (500) maka ini adalah panjang karakter maksimum untuk bidang itu. Panjang minimum bisa antara 0 dan 500. Di sisi lain ruang disk yang diklaim akan berbeda untuk bidang 10, 30 atau 500 karakter.
Kadang-kadang saya melakukan tes untuk tipe data varchar (800) dan untuk nilai nol saya menggunakan 17 byte, dan untuk setiap karakter yang dimasukkan ditambahkan satu byte lagi. Misalnya string 400 karakter memiliki 417 byte yang digunakan pada disk.
sumber
Saya tidak berpikir, bahwa ada perbedaan antara tabel yang dibuat dengan kolom varchar (20) atau varchar ((8000), selama panjang maks sebenarnya adalah <= 20.
Di sisi lain, dalam beberapa kasus memberi pengguna kemungkinan untuk menyimpan string yang lebih lama mungkin mendorong mereka untuk melakukannya.
sumber