Oracle
 sql >> база данни >  >> RDS >> Oracle

Някакви недостатъци на битовите флагове в колоните на базата данни?

Ако имате само няколко роли, дори не запазвате никакво хранилище пространство в PostgreSQL . integer колоната използва 4 байта, bigint 8 байта. И двете може да изискват подравняване:

  • Разбиране на размерите на редовете в Postgres
  • Изчисляване и спестяване на място в PostgreSQL

boolean колоната използва 1 байт. Ефективно можете да поставите четири или повече булеви колони за едно integer колона, осем или повече за bigint .

Също така имайте предвид, че NULL стойностите използват само един бит (опростен) в растерната карта NULL.

Отделните колони са по-лесни за четене и индексиране . Други вече коментираха това.

Все още можете да използвате индекси на изрази или частични индекси, за да заобиколите проблеми с индексите („не-sargable“). Обобщени твърдения като:

базата данни не може да използва индекси за заявка като тази

или

Тези условия не подлежат на SARG!

не са напълно верни - може би за някои други RDBMS без тези функции.
Но защо да заобикаляте, когато можете да избегнете проблема напълно?

Както уточнихте, говорим за 6 различни вида (може и повече). Отидете с индивидуален boolean колони. Вероятно дори ще спестите място в сравнение с един bigint . Изискването за пространство изглежда незначително в този случай.

Ако тези знамена са взаимно изключващи се , можете да използвате един колона от тип enum или малка справочна таблица и външен ключ, препращащ към нея. (Изключено във въпросната актуализация.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL еквивалент на SEQUENCE.NEXTVAL на Oracle

  2. Парсер за Oracle SQL

  3. SET NULL:Посочете низ, който да се връща всеки път, когато се появи нулева стойност в SQLcl / SQL*Plus

  4. Oracle Forms в R12/R12.2

  5. Oracle вмъкване от select в таблица с повече колони