PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jaki jest koszt ograniczeń CHECK w Postgresie 9.x?

Niektórzy ludzie starają się unikać NULL wartości, twierdząc, że logika byłaby myląca.

Nie jestem jednym z nich. NULL wartości są w porządku dla kolumn bez danych. Są z pewnością najtańszym sposobem na przechowywanie "pustych" kolumn - zarówno pod względem miejsca na dysku, jak i wydajności (główny efekt to mniejsze tabele i indeksy):

Gdy zrozumiesz charakter NULL wartości, nie ma powodu, aby ich unikać. Postgres oferuje szereg funkcji do radzenia sobie z wartościami NULL. colaesce() , nullif() , concat() , concat_ws() , ...

Ogólnie rzecz biorąc, jeśli chodzi o wydajność dotyczy, ograniczenie NOT NULL pokonuje ograniczenie SPRAWDŹ i obaj pokonują wyzwalacze przez strzał z dziennika. Ale nawet proste wyzwalacze są tanie. Koszt NOT NULL ograniczenie jest prawie nic. Ponadto wszystkie te czynniki mają wpływ tylko na operacje zapisu, ale w większości aplikacji dominują operacje odczytu.

Najistotniejszy wpływ na wydajność (pomijając nieoptymalne indeksy i zapytania) ma zatem rozmiar tabel i indeksów lub, co ważniejsze, liczba krotek na stronie danych . Większe krotki prowadzą do niższej wydajności w większości przypadków użycia. Odpowiednio wzrasta liczba stron danych, które muszą zostać odczytane, aby spełnić zapytanie. Dostępna pamięć podręczna jest nasycana wcześniej.

Nie mam gotowego testu porównawczego, ale i tak najlepiej jest przetestować go pod kątem konkretnego środowiska. To tylko proste zasady. Rzeczywistość jest o wiele bardziej złożona.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak pogrupować wyniki według liczby relacji?

  2. Funkcja DATE ADD w PostgreSQL

  3. Jak uzyskać aktualną datę w PostgreSQL

  4. Dodaj kolumnę do tabeli we wszystkich schematach bazy danych PostgreSQL

  5. Błąd podczas używania R do pobierania danych uwierzytelniających z Windows Cred Vault