Dampak kecepatan menggunakan varchar di SQL Server 2008

9

Di masa lalu, menggunakan varcharlebih dari charbesar tidak tidak, karena varchardisimpan pada halaman yang berbeda dari sisa baris. Apakah ini masih terjadi hari ini dengan SQL Server 2008? Apakah saya akan melihat peningkatan memori / kinerja dari mengubah 1-3 varchar(5)kolom menjadi char(5)kolom pada tabel dengan

a) ucapkan 2.000.000 baris b) jika salah satu varcharkolom adalah bagian dari indeks / kunci utama

Carlo V. Dango
sumber
2
Kemungkinan duplikat pertanyaan Bagaimana bidang yang terlalu panjang (varchar / nvarchar) memengaruhi kinerja dan penggunaan disk? (MSSQL Server 2008) . Jika Anda pikir itu bukan duplikat, maka pasti Anda akan menemukan beberapa jawaban di sana juga.
Marian

Jawaban:

8

Anda membingungkan teks / varchar (maks) (tipe LOB) dengan varchar (n) / char (n)

Kalau tidak, jika Anda menggunakan char (1000) bukan varchar (1000) dan panjang data rata-rata adalah, katakanlah, 42 ini adalah desain yang buruk dan banyak ruang yang terbuang.

gbn
sumber
di bawah DB2 dan beberapa mesin DB lainnya char dan varchar disimpan secara berbeda dan beberapa saran untuk DB2 ditransfer ke SQL Server.
Andrew Bickerton
@Andrew Bickerton: mitos lain ...
gbn
dapatkah Anda mengarahkan saya ke tempat mitos itu dibantah? (Saya setuju bahwa saran tersebut tidak berlaku untuk SQL Server)
Andrew Bickerton
Saya juga merujuk ke salah satu versi asli DB2 (mungkin belum seperti ini dalam 10 tahun terakhir), mirip dengan saran dengan SQL 2000 bahwa PK harus non-clustered karena masalah kinerja masih ada - meskipun tidak lagi benar
Andrew Bickerton
@ Andrew Bickerton: cukup melihat pada struktur disk SQL Server (beberapa jawaban SO dari saya) stackoverflow.com/search?q=user%3A27535+anatomy . Maaf atas keterlambatan balasan
gbn
3

Sulit untuk memberi tahu Anda tentang perolehan atau hit kinerja spesifik tanpa mengetahui lebih banyak tentang skema Anda, tetapi secara umum Anda ingin menentukan dataype agar sesuai dengan data Anda. Jika Anda membutuhkan lebar tetap (mis. Anda tahu Anda akan selalu memiliki lima karakter) maka Anda harus menggunakan char (5). Jika Anda memiliki jumlah data variabel maka Anda harus menggunakan varchar (5).

Untuk SQL, semakin banyak data yang dapat Anda muat di sebuah halaman, semakin baik kinerja Anda.

SQLRockstar
sumber
3

Sejauh yang saya tahu SQL Server tidak pernah menyimpan tipe data varchar atau nvarchar di luar baris. Teks dan NText berbeda. Ada beberapa bit tambahan yang disimpan untuk kolom lebar variabel, tetapi hanya itu saja.

mrdenny
sumber