나는 이것이 MySQL에서 좋은 생각이라는 것을 알고있다. 정확하게 기억한다면, MySQL에서는 인덱스가 더 효율적으로 작동 할 수 있습니다.postgresql의 열에 "NOT NULL"을 설정하면 성능이 향상됩니까?
답변
:-) 거기에 널 (null)을 저장하지 않을 때 당신은 항상가로 설정 한다 그래서 그것은 항상 좋은 사용의 의미가 너무 지저분하기 때문에 열을 NULL로 유지하는 것이 바람직하다. 그 (것)들이 어떻게 문제로 당신을 얻을 수 있는지 좋은 의논을위한 What is the deal with NULLs?를보십시오.
최대 8.2 버전의 PostgreSQL에서는 소프트웨어가 NULL 값을 찾는 방식으로 가장 일반적인 유형 색인 (b- 트리)에서 비교하는 방법을 알지 못했습니다. 관련 비트가 documentation on index types 인 경우 "그러나 NULL은 IS =와 같지 않으며 인덱싱 할 수 없습니다"라는 메시지가 나타납니다. 이 단점에 대한 효과적인 단점은 NULL 값을 포함해야하는 쿼리를 지정하면 플래너가 해당 케이스에 대한 명백한 인덱스를 사용하여 쿼리를 충족시키지 못할 수도 있다는 것입니다. 간단한 예를 들어 인덱스로 가속화 할 수있는 ORDER BY 문이 있지만 쿼리가 NULL 값을 반환해야하는 경우 옵티마이 저는 결과에 NULL 데이터가 누락 될 수 있으므로 해당 인덱스를 사용할 수 없습니다. 그러므로 불완전하고 쓸모 없다. 옵티마이 저는이를 알고 테이블 대신 색인화되지 않은 스캔을 수행하며, 이는 매우 비쌀 수 있습니다.
PostgreSQL improved this in 8.3 "인덱스 열의 IS NULL 조건은 B- 트리 인덱스와 함께 사용할 수 있습니다". 따라서 NULL 값을 갖는 무언가를 색인하려고하여 화상을 입을 수있는 상황이 감소되었습니다. 그러나 NULL 의미가 여전히 고통 스럽기 때문에 8.3 계획 자라도 기대 한 바를 수행하지 못하는 상황에 처할 수도 있으므로 가능한 한 NOT NOT NULL을 사용하여 잘못 최적화 된 쿼리를 실행할 확률을 낮추어야합니다 .
아니요, 실제로 테이블에 NULL을 저장하지 않는 한 인덱스는 똑같이 (그리고 똑같이 효율적으로) 보입니다. 열을 설정
에 NOT NULL하지만 다른 장점을 많이 가지고, 당신은
설정 NOT NULL
은 성능에 아무런 영향을 미치지 않습니다. 수표에 대한 몇 가지 사이클 - 관련성이 없습니다.
그러나 더미 값 대신 실제로 NULL을 사용하여 성능을 향상시킬 수 있습니다. 데이터 유형에 따라 디스크 공간과 RAM을 많이 절약 할 수 있습니다., 따라서 모든 작업 속도가 빨라집니다.
NULL 비트 맵은 행에에 NULL 값이있는 경우에만 할당됩니다. 그것은 행에있는 모든 열 (NULL 여부)에 대해 에 대해 1 비트입니다. 최대 8 개 열의 테이블의 경우 null 비트 맵은 터플 헤더와 행 데이터 사이에 스페어 바이트를 사용하여 사실상 완전히 무료입니다. 그 후에 공간은 MAXALIGN
의 배수로 할당됩니다 (일반적으로 64 바이트를 포함하여 8 바이트). 차이는 패딩에 손실됩니다. 따라서 각 행의 첫 번째 NULL 값 에 대한 전체 가격 (낮은 가격)을 지불하십시오.. 추가 NULL 값은 공간을 절약 할 수 있습니다.
비 널값 최소 저장 요구는 통상적
1 바이트 (boolean
, "char"
...) 또는 많이 보다 더한 정렬 (가능) 패딩이다. data types을 읽거나 시스템 테이블 pg_type
의 세부 정보를 확인하십시오.널 스토리지에 대한 더 :
"수표주기"란 무엇을 의미합니까? – ma11hew28
@MattDiPasquale : Postgres는 제약 조건을 적용하고 충족되지 않으면 예외를 발생시켜야합니다. NULL에 대한 테스트가 매우 간단하므로 비용은 무시할 수 있습니다. –
- 1. 쿼리에서 .readonly를 설정하면 성능이 향상됩니까?
- 2. group by 절에 사용 된 필드에 색인을 설정하면 성능이 향상됩니까?
- 3. 압축하면 성능이 향상됩니까?
- 4. 인터페이스에 입력하면 성능이 향상됩니까?
- 5. 클러스터 된 인덱스 열에 비 클러스터형 인덱스를 사용하면 성능이 향상됩니까?
- 6. Smarty + Caching을 사용하면 성능이 향상됩니까?
- 7. SqlCommand.Cancel()로 인해 성능이 향상됩니까?
- 8. PostgreSQL의 열에 값을 삽입하십시오.
- 9. .net 2.0에서 4.0으로 업그레이드하면 성능이 향상됩니까?
- 10. C# 메서드에 return 문을 추가하면 성능이 향상됩니까?
- 11. 파일 업로드 컨트롤러가 AsyncController로 변환하면 성능이 향상됩니까?
- 12. 포함/증가 횟수를 줄이면 성능이 향상됩니까?
- 13. jQuery를 사용하여 값으로 옵션을 선택하면 성능이 향상됩니까?
- 14. SQL 테이블을 인덱싱하면 LINQ 문의 성능이 향상됩니까?
- 15. 인덱스 크기를 줄임으로써 MySQL 성능이 향상됩니까?
- 16. Server 2008 R2로 업그레이드하면 성능이 향상됩니까?
- 17. 직선 ado.net과 ORM을 비교하면 성능이 향상됩니까?
- 18. varchar로 항상 준비된 문에서 null을 설정하면 어떻게됩니까?
- 19. 외래 키가 많은 모델을 쿼리 할 때 django 성능이 향상됩니까?
- 20. 불필요한 네임 스페이스 (using) 지시문을 제거 할 때 성능이 향상됩니까?
- 21. 맞춤형 USB 드라이버로 내 응용 프로그램 성능이 향상됩니까?
- 22. 64 비트 톰캣을 사용하면 32 비트 톰캣보다 성능이 향상됩니까?
- 23. 저장 프로 시저를 병렬 처리하면 클러스터의 성능이 향상됩니까?
- 24. .NET COM Interop에서 팩토리 메서드를 사용하면 성능이 향상됩니까?
- 25. 인라인 이미지에 너비와 높이를 추가하면 페이지로드 성능이 향상됩니까?
- 26. 레일 : i18n, 내 전체 앱을 현지화로 변환하면 성능이 크게 향상됩니까?
- 27. 여러 쿼리 대신 하나의 조인 된 쿼리를 사용하면 성능이 향상됩니까?
- 28. if() else if()를 사용하여 switch 문을 사용하면 성능이 향상됩니까?
- 29. jQuery에서 HTML을 효율적으로 복제 : javascript 템플릿과 HTML을 추가하면 성능이 향상됩니까?
- 30. CF 9에 내장 된 ORM을 사용하면 성능이 향상됩니까?
좋은 댓글이 ... 내가 널 (null)과 인덱스되지 사이의 관계를 몰랐다. 고마워! –