Някои хора се опитват да избегнат NULL
стойности, твърдейки, че логиката би била объркваща.
Аз не съм от тях. NULL
стойностите са добри за колони без данни. Те със сигурност са най-евтиният начин за съхраняване на "празни" колони - за дисково пространство, както и за производителност (основният ефект е по-малките таблици и индекси):
- Неизползването на NULL в PostgreSQL все още ли използва растерно изображение NULL в заглавката?
- Настройката "NOT NULL" на колона в postgresql повишава ли производителността?
- Колоните с nullable заемат ли допълнително място в PostgreSQL?
След като разберете природата на NULL
ценности, няма причина да ги избягваме. Postgres предлага разнообразие от функции за справяне с NULL. colaesce()
, nullif()
, concat()
, concat_ws()
, ...
Като цяло, що се отнася до производителността се отнася до ограничение NOT NULL побеждава ограничение CHECK и двата ударнат чрез изстрел от дънер. Но дори простите тригери са евтини. Цената на NOT NULL
ограничението е почти нищо. Освен това всички те засягат само операциите за запис, но в повечето приложения доминират операциите за четене.
Следователно най-подходящото въздействие върху производителността (недоптималните индекси и заявки) е размерът на таблици и индекси или, което е по-важно, броя кортежи на страница с данни . По-големите кортежи водят до по-бавна производителност за повечето случаи на употреба. Броят на страниците с данни, които трябва да бъдат прочетени, за да се удовлетвори дадена заявка, се увеличава съответно. Наличната кеш памет е наситена по-рано.
Нямам готов бенчмарк, но все пак е най-добре да тествате за вашата конкретна среда. Това са просто прости правила. Реалността е много по-сложна.