Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Adakah kerugian dari bendera bit di kolom basis data?

Jika Anda hanya memiliki beberapa peran, Anda bahkan tidak menyimpan penyimpanan spasi di PostgreSQL . Sebuah integer kolom menggunakan 4 byte, sebuah bigint 8 byte. Keduanya mungkin memerlukan padding penyelarasan:

  • Memahami ukuran baris Postgres
  • Menghitung dan menghemat ruang di PostgreSQL

Sebuah boolean kolom menggunakan 1 byte. Secara efektif, Anda dapat memasukkan empat atau lebih kolom boolean untuk satu integer kolom, delapan atau lebih untuk bigint .

Perhatikan juga bahwa NULL nilai hanya menggunakan satu bit (disederhanakan) dalam bitmap NULL.

Kolom individual lebih mudah dibaca dan diindeks . Yang lain sudah mengomentari itu.

Anda masih dapat menggunakan indeks pada ekspresi atau indeks parsial untuk menghindari masalah dengan indeks ("non-sargable"). Pernyataan umum seperti:

database tidak dapat menggunakan indeks pada kueri seperti ini

atau

Kondisi ini tidak dapat di-SARG!

adalah tidak sepenuhnya benar - mungkin untuk beberapa orang lain RDBMS tidak memiliki fitur ini.
Tetapi mengapa menghindari jika Anda dapat menghindari masalah sama sekali?

Seperti yang telah Anda jelaskan, kita berbicara tentang 6 jenis yang berbeda (mungkin lebih). Gunakan boolean individu kolom. Anda bahkan mungkin akan menghemat ruang dibandingkan dengan satu bigint . Kebutuhan ruang tampaknya tidak penting dalam kasus ini.

Jika bendera ini saling eksklusif , Anda dapat menggunakan satu kolom tipe enum atau tabel pencarian kecil dan kunci asing yang mereferensikannya. (Dikesampingkan dalam pembaruan pertanyaan.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:keunikan selektif indeks berbasis fungsi

  2. SQLPlus - spooling ke banyak file dari blok PL/SQL

  3. Bagaimana Anda menentukan klausa IN dalam kueri dinamis menggunakan variabel?

  4. Membalikkan String Kata demi Kata menggunakan SQL

  5. Kesalahan 1033 diterima masuk ke standby