Saya bertanggung jawab untuk membuat database pada suatu proyek. Kami memiliki bidang yang jarang memiliki nilai (1 dalam setiap 10.000 catatan) dan saya mencoba mencari cara terbaik untuk menyimpan ini dalam database.
Sejauh yang saya bisa lihat, saya memiliki 3 opsi:
- Tambahkan kolom di tabel untuk setiap nilai tambahan
- Tambahkan tabel tertaut yang mereferensikan tabel asli dan memiliki catatan hanya di mana kita perlu menyimpan nilai
- Gunakan tipe data XML dalam tabel asli dan simpan semua nilai dalam ini.
Apakah ada opsi lain yang tidak saya pertimbangkan?
Saya mencoba mencari pro dan kontra dari setiap metode. Sejauh yang saya tahu 1 akan menjadi yang paling mudah dan 2 akan mengambil jumlah ruang paling sedikit tapi saya berjuang untuk menemukan banyak sumber daya untuk 3.
sql-server-2008
xml
Matthew Steeples
sumber
sumber
Jawaban:
Kedengarannya seperti yang Anda butuhkan adalah kolom yang jarang dan indeks yang difilter dan ikuti dengan opsi 1. Ini adalah fitur yang sepenuhnya didukung dan didokumentasikan untuk skenario ini.
Saya tidak bisa membayangkan solusi XML berkinerja baik dalam skenario ini, itu akan memiliki overhead yang besar dari metadata yang berlebihan dan akan lambat untuk query.
sumber
Kolom nullable tidak membutuhkan ruang jika panjang variabel dalam SQL Server. Fakta menjadi NULL disimpan dalam bitmap NULL . Anda dapat mengindeksnya jika diperlukan dengan indeks yang difilter sehingga Anda mengabaikan kolom NULL.
Menambahkan kompleksitas ketika Anda mempertimbangkan poin 1.
Jangan. Sulit dicari, parsing dll: Anda akan menyesalinya nanti
Ini juga tergantung pada ukuran: apakah ini akan menjadi char (1000) untuk beberapa miliar baris? Atau tinyint untuk baris 100rb? Jika yang terakhir mempertimbangkan kompleksitas poin 2 yang ditambahkan: tidak sepadan.
sumber
Dengan SQL Server 2008 Anda memiliki opsi tambahan untuk menggunakan kolom jarang, yang dirancang khusus untuk situasi yang Anda sebutkan.
Mereka memiliki manfaat tambahan bahwa Anda dapat melihatnya sebagai objek XML gabungan menggunakan XML COLUMN_SET atau referensi secara individual dan mereka memberikan penghematan ruang yang luar biasa.
Lihat artikel blog berikut untuk lebih jelasnya: http://www.sqlskills.com/BLOGS/PAUL/post/SQL-Server-2008-Sparse-columns-and-XML-COLUMN_SET.aspx
sumber
Opsi keempat: jangan gunakan tabel. Tabel sangat tidak cocok untuk data jenis ini (pada kenyataannya, untuk semua jenis data yang belum dipasang secara paksa ke dalam bentuk tabel). Cukup gunakan XML.
sumber