Saya perlu menyimpan bit array untuk setiap record tabel, mendukung operasi berikut:
Menguji jika bit diatur, dan mengatur bit (menggunakan SQL)
Menanyakan dan mengatur nilai menggunakan ADO 2.8 (bukan ADO.NET)
Pengindeksan (untuk mendapat manfaat dari fitur "indeks penutup")
Jumlah bit maksimum yang akan disimpan dalam array ini adalah tetap, tetapi dapat melebihi 32 . Yaitu, kolom int sederhana tidak selalu berfungsi.
Dari apa yang saya lihat sejauh ini, opsi saya adalah:
- Gunakan beberapa kolom int
- Gunakan bigint (berfungsi selama jumlah bit <= 64)
- Gunakan biner
- ?
Opsi pertama akan berfungsi, tetapi membutuhkan sedikit refactoring dalam kode yang mengakses data. Pilihan kedua adalah bantuan sementara saja, dan dari pencarian saya sejauh ini saya tidak terlalu yakin apakah ADO bekerja dengan baik dengan bigint . Saya tidak punya pengalaman dengan biner , dan saya tidak mengetahui adanya opsi lain.
Jenis data apa yang akan Anda pilih, mengingat persyaratannya?
Jika yang perlu Anda simpan adalah jumlah benar / salah dalam jumlah moderat, Anda bisa menggunakan
bit
tipe data.Secara internal, SQL Server menyimpan
bit
kolom yang dikemas dalam byte "chunks." Jadi untuk hingga 8bit
kolom di tabel Anda, SQL menyimpannya sebagai 1 byte yang dikemas; 9-16bit
kolom dalam 2 byte, dan seterusnya.Tidak terdengar seperti Anda akan mendekati batas kolom, jadi ini sepertinya cukup mudah. Dan tentu saja, menjaga mereka dipisahkan dengan baik seperti itu memungkinkan Anda untuk memberi nama kolom untuk keterbacaan dan mendapatkan semua kemungkinan pengindeksan seperti biasanya (jika bendera sangat selektif, indeks yang difilter mungkin berguna jika Anda dapat menargetkan 2008+).
Melakukan pengepakan bit sendiri akan membuatnya jauh lebih berbelit-belit untuk melakukan pengindeksan (mungkin
bit
kolom yang dihitung dan diindeks untuk mewakili setiap posisi topeng ... tapi kemudian Anda lebih buruk daripada menggunakanbit
secara langsung).sumber