Saya perlu memperbarui database SQL Server yang berukuran sekitar 18GB untuk mengubah sejumlah TEXT
kolom NVARCHAR(MAX)
.
Masalah yang saya alami adalah setelah menjalankan semua alter table
perintah database akhirnya berukuran hampir 26GB. Saya mengerti bahwa dari sini menggunakan NVARCHAR(MAX)
akan memungkinkan DB tumbuh lebih lambat tetapi apakah ada cara bagi saya untuk mencegah kembung ini?
sql-server
Aidan Lawless
sumber
sumber
Jawaban:
Saya berharap posting ini akan membantu Anda.
http://geekswithblogs.net/johnsPerfBlog/archive/2008/04/16/ntext-vs-nvarcharmax-in-sql-2005.aspx
Fakta-fakta kunci:
Ketika Anda mengubah kolom dari TEXT / NTEXT ke NVARCHAR (MAX), cara data disimpan tidak diubah, itu memperbarui metadata tabel saja. Struktur data hanya diubah pada saat nilai diubah. Ini dapat dilakukan segera dengan menjalankan sesuatu seperti ini:
Jika Anda menggunakan pengaturan opsi tabel default untuk NVARCHAR (MAX), maka data di tabel Anda akan lebih besar.
- Anda perlu melihat pengaturan opsi meja dan lingkungan sebelum mengubah pengaturan sesuai dengan kebutuhan Anda.
Ukuran tabel Anda akhirnya akan menyusut, jika Anda mengikuti pernyataan tabel alter Anda dengan pernyataan tabel pembaruan.
Singkatnya, jika Anda menjalankan pernyataan pembaruan, memaksa penyimpanan struktur data diubah, ukuran basis data Anda akan lebih kecil, seperti yang diharapkan.
EDIT : Seperti yang telah Anda sebutkan TEXT dan bukan NTEXT, keuntungan Anda dalam ruang akan kurang jelas dari yang Anda kira. NTEXT mengambil dua kali lipat jumlah ruang seperti yang dilakukan TEXT, tetapi pada saat yang sama, Anda harus mengharapkan NVARCHAR (MAX) mengambil sekitar setengah ruang seperti apa yang dilakukan NTEXT. Dengan perhitungan saya, Anda akan melihat sedikit perubahan dari ukuran database asli Anda.
sumber
Mungkin ada kekeliruan dalam pertanyaan Anda, tetapi Anda mengatakan TEXT ke NVARCHAR (maks) dan bukan NTEXT ke NVARCHAR (maks). Jika ini yang benar-benar Anda lakukan, Anda berubah dari ANSI ke UNICODE dan Anda tidak perlu kaget karena membutuhkan lebih banyak ruang (karakter byte tunggal vs karakter multi-byte).
sumber
TEXT
bidang yang ada - pergi ke unicode membutuhkan tepat dua kali ruang penyimpanan ANSI.