테이블에 만들 인덱스를 알 수있는 가장 좋은 방법을 알아낼 수있는 방법이 있습니까?
WHERE
절 에서 사용하는 기본 키와 열을 색인화해야한다는 것 입니다.
테이블에 만들 인덱스를 알 수있는 가장 좋은 방법을 알아낼 수있는 방법이 있습니까?
WHERE
절 에서 사용하는 기본 키와 열을 색인화해야한다는 것 입니다.
답변:
짧은 경험 법칙. (이 중 일부는 자동으로 생성되지만 dbms에 따라 나중에 수동으로 삭제 될 수 있습니다. PostgreSQL에서 항상 작업 한다고 가정하지 마십시오 .)
모든 기본 키 는 다중 열 기본 키에 모든 열을 포함하는 단일 인덱스가 있어야 함을 의미합니다. 다중 열 기본 키를 선언하면 PostgreSQL에서이 인덱스를 자동으로 생성합니다.
단일 다중 컬럼 인덱스가 여러 단일 컬럼 인덱스보다 나은 성능을 제공하는 경우가 많이 있습니다. 느린 쿼리를 모니터링 하고 테스트를 수행하여 어떤 쿼리 인지 파악하십시오.
인덱싱을 변경하면 일부 데이터베이스 활동이 향상되고 다른 데이터베이스 활동이 저하된다고 가정하십시오. 인덱스를 변경하기 전후에 프로파일 링 할 수있는 일련의 SQL 문을 갖는 것이 도움이됩니다. 이 세트에는 SELECT, INSERT, UPDATE 및 DELETE 문이 포함됩니다.
특정 DBMS에 대한 문서를 연구하는 것에 대한 대안은 없습니다.
@Catcall이 이미 제공 한 것 외에도 작은 수정 사항을 추가하십시오.
또한 최근 에 이와 밀접하게 관련된 답변 에서 몇 가지 기본 사항을 다루었습니다 .
지금까지의 답변은 기본 키에서 인덱스를 만들어야한다는 것을 나타내는 것으로 보이지만 PostgreSQL에서는 그렇지 않습니다 (일부 예외 적용). 나는 여기에 매뉴얼을 인용 한다 :
테이블에 대해 고유 제한 조건 또는 기본 키가 정의되면 PostgreSQL은 자동으로 고유 인덱스를 생성합니다. 인덱스는 기본 키 또는 고유 제한 조건 구성하는 열을 포함 (해당되는 경우, 다중 열 인덱스) 및 제약 조건을 적용하는 메커니즘입니다.
대담한 강조 광산.
추가 인덱스 를 만들 수 있습니다 다중 열 인덱스의 두 번째 이상 열의를하지만, 첫 번째는 일반적으로 멀티 컬럼 인덱스로 잘 덮여있다 - 추가 열 인덱스가 훨씬 더 크게 만들 경우를 제외하고. 우리는이 관련 질문에 대해 자세히 설명했습니다.
다중 열 인덱스 , 부분 인덱스 및 식 인덱스 는 특히 PostgreSQL의 강력한 도구입니다. PostgreSQL 9.2부터 다른 RDBMS의 "커버링 인덱스"에 해당하는 인덱스 전용 스캔 도 있습니다 . 이것은 다른 유형의 인덱스가 아니라 기존 인덱스 유형을 가진 RDBMS의 새로운 기능입니다.
모든 인덱스에는 특정 비용이 들기 때문에 인덱싱을 실제로 최적화 할 수있는 몇 가지 기본 지식이 없습니다. 더 많은 인덱스를 작성하면 좋은 것보다 더 많은 피해를 줄 수 있습니다. 특히 인덱스는 HOT 업데이트 가 성능을 향상 시키지 못하게 할 수 있습니다 .
일반적으로 쓰기 작업 ( DELETE
, UPDATE
)은 비용이 많이 들지만 혜택도있을 수 있지만 읽기 작업 ( SELECT
)은 일반적으로 이점이 있습니다. 너무 많은 인덱스는 캐시 메모리를 소진하여 읽기 작업조차도 할 수 있습니다. 있습니다.
마지막으로, 인덱스 유지 관리에 대한이 Postgres Wiki 페이지는 중복되거나 사용되지 않은 인덱스를 찾는 도구를 제공합니다.