Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Bất kỳ nhược điểm nào đối với cờ bit trong cột cơ sở dữ liệu?

Nếu bạn chỉ có một số vai trò, bạn thậm chí không lưu bất kỳ bộ nhớ nào không gian trong PostgreSQL . Một integer cột sử dụng 4 byte, bigint 8 byte. Cả hai đều có thể yêu cầu đệm căn chỉnh:

  • Tìm hiểu về kích thước hàng Postgres
  • Tính toán và tiết kiệm dung lượng trong PostgreSQL

Một boolean cột sử dụng 1 byte. Một cách hiệu quả, bạn có thể điều chỉnh bốn hoặc nhiều cột boolean cho một integer cột, tám hoặc nhiều hơn cho một bigint .

Cũng tính đến NULL các giá trị chỉ sử dụng một bit (đơn giản hóa) trong bitmap NULL.

Các cột riêng lẻ dễ đọc hơn và lập chỉ mục . Những người khác đã nhận xét về điều đó.

Bạn vẫn có thể sử dụng chỉ mục trên các biểu thức hoặc chỉ mục một phần để tránh các vấn đề với chỉ mục ("không phân chia được"). Các tuyên bố tổng quát như:

cơ sở dữ liệu không thể sử dụng các chỉ mục trên một truy vấn như thế này

hoặc

Các điều kiện này không phải là SARGable!

không hoàn toàn đúng - có thể đối với một số RDBMS khác thiếu các tính năng này.
Nhưng tại sao lại tránh né khi bạn có thể tránh được hoàn toàn vấn đề?

Như bạn đã làm rõ, chúng ta đang nói về 6 loại riêng biệt (có thể nhiều hơn). Đi với boolean riêng lẻ cột. Bạn thậm chí có thể tiết kiệm dung lượng so với một bigint . Yêu cầu về không gian dường như không quan trọng trong trường hợp này.

Nếu những lá cờ này đã loại trừ lẫn nhau , bạn có thể sử dụng một cột của loại enum hoặc một bảng tra cứu nhỏ và một khóa ngoại tham chiếu đến nó. (Bị loại trong bản cập nhật câu hỏi.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách kết nối với Oracle bằng JRuby &JDBC

  2. Làm thế nào để sử dụng Partition By hoặc Max?

  3. System.Data.OracleClient yêu cầu phần mềm máy khách Oracle phiên bản 8.1.7 trở lên

  4. cách thay thế nhiều chuỗi với nhau trong Oracle

  5. Tại sao trong SQL NULL không thể khớp với NULL?