테이블에 만들 인덱스를 어떻게 알 수 있습니까?


33

테이블에 만들 인덱스를 알 수있는 가장 좋은 방법을 알아낼 수있는 방법이 있습니까?


11
있습니다. 예를 들어 use-the-index-luke.com 을 사용해보십시오 .
dezso

내가 가장 많이 본 대답은 WHERE절 에서 사용하는 기본 키와 열을 색인화해야한다는 것 입니다.
Oskar Persson

그렇게하지 마십시오. 기본 키는 데이터가 테이블에서 실제로 정렬되는 방식을 정의하며 자체 고려 사항이 있습니다. 기본 키는 다른 모든 인덱스에도 사용되므로 매우 신중하게 선택해야합니다. 참조 : sqlskills.com/blogs/kimberly/…
Ali Razeghi

4
@AliRazeghi 그 (물리적 정렬)는 특정 DBMS (특정 상황에서)에서는 사실이지만 다른에서는 그렇지 않습니다. 예를 들어 PostgreSQL에서는 그렇지 않습니다.
dezso

다시 투표!
Ali Razeghi

답변:


29

짧은 경험 법칙. (이 중 일부는 자동으로 생성되지만 dbms에 따라 나중에 수동으로 삭제 될 수 있습니다. PostgreSQL에서 항상 작업 한다고 가정하지 마십시오 .)

  • 모든 기본 키를 색인화하십시오.
  • 모든 외래 키를 색인화하십시오.
  • JOIN 절에 사용 된 모든 열을 색인화하십시오.
  • WHERE 절에 사용 된 모든 열을 색인화하십시오.
  • dbms가 지원하는 "비"인덱싱 옵션을 배우려면 문서를 연구하십시오.

모든 기본 키 는 다중 열 기본 키에 모든 열을 포함하는 단일 인덱스가 있어야 함을 의미합니다. 다중 열 기본 키를 선언하면 PostgreSQL에서이 인덱스를 자동으로 생성합니다.

단일 다중 컬럼 인덱스가 여러 단일 컬럼 인덱스보다 나은 성능을 제공하는 경우가 많이 있습니다. 느린 쿼리를 모니터링 하고 테스트를 수행하여 어떤 쿼리 인지 파악하십시오.

인덱싱을 변경하면 일부 데이터베이스 활동이 향상되고 다른 데이터베이스 활동이 저하된다고 가정하십시오. 인덱스를 변경하기 전후에 프로파일 링 할 수있는 일련의 SQL 문을 갖는 것이 도움이됩니다. 이 세트에는 SELECT, INSERT, UPDATE 및 DELETE 문이 포함됩니다.

특정 DBMS에 대한 문서를 연구하는 것에 대한 대안은 없습니다.


14

@Catcall이 이미 제공 한 것 외에도 작은 수정 사항을 추가하십시오.

또한 최근이와 밀접하게 관련된 답변 에서 몇 가지 기본 사항을 다루었습니다 .

지금까지의 답변은 기본 키에서 인덱스를 만들어야한다는 것을 나타내는 것으로 보이지만 PostgreSQL에서는 그렇지 않습니다 (일부 예외 적용). 나는 여기에 매뉴얼을 인용 한다 :

테이블에 대해 고유 제한 조건 또는 기본 키가 정의되면 PostgreSQL은 자동으로 고유 인덱스를 생성합니다. 인덱스는 기본 키 또는 고유 제한 조건 구성하는 열을 포함 (해당되는 경우, 다중 열 인덱스) 및 제약 조건을 적용하는 메커니즘입니다.

대담한 강조 광산.

추가 인덱스 를 만들 수 있습니다 다중 열 인덱스의 두 번째 이상 열의를하지만, 첫 번째는 일반적으로 멀티 컬럼 인덱스로 잘 덮여있다 - 추가 열 인덱스가 훨씬 더 크게 만들 경우를 제외하고. 우리는이 관련 질문에 대해 자세히 설명했습니다.

복합 색인도 첫 번째 필드의 쿼리에도 적합합니까?

다중 열 인덱스 , 부분 인덱스식 인덱스 는 특히 PostgreSQL의 강력한 도구입니다. PostgreSQL 9.2부터 다른 RDBMS의 "커버링 인덱스"에 해당하는 인덱스 전용 스캔 도 있습니다 . 이것은 다른 유형의 인덱스가 아니라 기존 인덱스 유형을 가진 RDBMS의 새로운 기능입니다.

모든 인덱스에는 특정 비용이 들기 때문에 인덱싱을 실제로 최적화 할 수있는 몇 가지 기본 지식이 없습니다. 더 많은 인덱스를 작성하면 좋은 것보다 더 많은 피해를 줄 수 있습니다. 특히 인덱스는 HOT 업데이트 가 성능을 향상 시키지 못하게 할 수 있습니다 .

일반적으로 쓰기 작업 ( DELETE, UPDATE)은 비용이 많이 들지만 혜택도있을 수 있지만 읽기 작업 ( SELECT)은 일반적으로 이점이 있습니다. 너무 많은 인덱스는 캐시 메모리를 소진하여 읽기 작업조차도 할 수 있습니다. 있습니다.

마지막으로, 인덱스 유지 관리에 대한이 Postgres Wiki 페이지는 중복되거나 사용되지 않은 인덱스를 찾는 도구를 제공합니다.


올바르게 기억한다면 PK를 통한 자동 인덱스도 Oracle v.> = 10 및 Sql Server> = 2008
EAmez

1

두 가지 옵션이 있습니다.

  1. 당신은 그것을 할.
  2. 기술이 해냅니다.

스스로 해내는 대답은 여기에 철저하게 문서화되어 있습니다. 그럼 다른 것을 보도록합시다.

페그로

자동화 된 조언이 필요한 경우 Pghero 가 도와 드릴 수 있습니다.

그것은 몇 가지 단점이 있다고 말했다.

  1. 그것은 단지에서 작동 WHERE하고 ORDER BY아니, JOINS.
  2. NULL 백분율에 대한 통계 및 고유 값만 사용합니다.

자세한 내용은 이 비디오 를 확인하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.