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

Каква е цената на ограниченията CHECK в Postgres 9.x?

Някои хора се опитват да избегнат NULL стойности, твърдейки, че логиката би била объркваща.

Аз не съм от тях. NULL стойностите са добри за колони без данни. Те със сигурност са най-евтиният начин за съхраняване на "празни" колони - за дисково пространство, както и за производителност (основният ефект е по-малките таблици и индекси):

След като разберете природата на NULL ценности, няма причина да ги избягваме. Postgres предлага разнообразие от функции за справяне с NULL. colaesce() , nullif() , concat() , concat_ws() , ...

Като цяло, що се отнася до производителността се отнася до ограничение NOT NULL побеждава ограничение CHECK и двата ударнат чрез изстрел от дънер. Но дори простите тригери са евтини. Цената на NOT NULL ограничението е почти нищо. Освен това всички те засягат само операциите за запис, но в повечето приложения доминират операциите за четене.

Следователно най-подходящото въздействие върху производителността (недоптималните индекси и заявки) е размерът на таблици и индекси или, което е по-важно, броя кортежи на страница с данни . По-големите кортежи водят до по-бавна производителност за повечето случаи на употреба. Броят на страниците с данни, които трябва да бъдат прочетени, за да се удовлетвори дадена заявка, се увеличава съответно. Наличната кеш памет е наситена по-рано.

Нямам готов бенчмарк, но все пак е най-добре да тествате за вашата конкретна среда. Това са просто прости правила. Реалността е много по-сложна.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:Универсалният INSERT

  2. Поточно предаване на данни от Postgres в Python

  3. Как да извикам функция на база данни с помощта на SQLAlchemy във Flask?

  4. Алгоритъм за съвпадение в SQL

  5. Как да проверите дали схемата на PostgreSQL съществува с помощта на SQLAlchemy?