확실합니다. 우리는이 관련 질문에 대해 자세히 설명했습니다.
공간은의 배수로 할당 MAXALIGN
되는데, 일반적으로 64 비트 OS에서는 8 바이트, 32 비트 OS에서는 4 바이트입니다. 확실하지 않은 경우 확인하십시오 pg_controldata
. 또한 인덱스 열의 데이터 유형 (일부 정렬 패딩이 필요함) 및 실제 내용에 따라 다릅니다.
예를 들어, 두 개의 integer
열 (각 4 바이트) 의 인덱스는 일반적으로 하나의 인덱스만큼 정확하게 커지므로 다른 4 바이트는 정렬 패딩에 손실됩니다.
이 경우 쿼리 플래너가 인덱스와 인덱스를 (a,b)
비교할 때 실제로 단점이 없습니다 (a)
. 그리고 일반적으로 여러 쿼리가 동일한 인덱스를 사용하는 것이 좋습니다. 공유시 (또는 일부) 캐시에 (빠른) 캐시에 상주 할 가능성이 높아집니다.
이미에 인덱스를 유지 관리하고 있다면 인덱스 가 상당히 작지 않은 한 (a,b)
다른 인덱스를 만드는 것은 의미가 없습니다 . 동일은 하지 마찬가지 대 . 자세한 내용은 첫 번째 줄의 링크를 따르십시오.(a)
(b,a)
(a)
반대 방향에서 오는 경우와 같은 추가 색인이 필요한 경우 가능한 경우 (a,b)
기존 색인을 삭제하는 (a)
것이 좋습니다. PK 또는 UNIQUE
제약 조건 의 색인이므로 종종 불가능합니다 . Postgres 11부터는 절을 사용 b
하여 제약 조건 정의에 추가 하는 것만으로도 벗어날 수 있습니다 INCLUDE
. 매뉴얼의 세부 사항.
또는(b,a)
쿼리를 b
추가로 추가 하기 위해 대신 새 인덱스를 작성하십시오 . 동등 조건에 대해서만 btree 인덱스의 인덱스 표현식 순서는 중요하지 않습니다. 그러나 범위 조건과 관련된 경우에는 그렇게합니다. 보다:
정렬 패딩에 손실 된 공간 만 사용하더라도 인덱스에 추가 열을 포함시키는 경우 잠재적 단점 이 있습니다 .
- 추가 열이 업데이트 될 때마다 인덱스도 업데이트해야하므로 쓰기 작업에 비용이 추가되고 인덱스 팽창이 증가 할 수 있습니다.
- 인덱스 열이 관련되어 있으면 테이블의 HOT 업데이트 (힙만 튜플)가 불가능합니다 .
HOT 업데이트에 대한 추가 정보 :
물체 크기를 측정하는 방법 :