2009-12-28 6 views
5

모든 테이블에 대해 각 열의 선택성을 찾기 위해 스크립트를 만들었습니다. 100 행 미만의 일부 테이블에서는 열의 선택성이 50 % 이상입니다. 선택도 = 고유 값/총 수 행. 해당 열은 색인에 적합합니까? 또는 인덱스를 만들 때 행 수에 대한 최소 요구 사항을 알려주시겠습니까?인덱스를 만드는 데 필요한 최소 행 수는 얼마입니까?

답변

5

당신이 할 수있는 어떤 컬럼에 인덱스 - 문제는 ....이 어떤 의미가 있는지 여부 및 그 인덱스를 사용할지 여부를 일반적으로

, 작동 할 수 있습니다 미만 1~5%의 선택입니다 -이 작은 그 비율은 더 좋습니다. 가장 좋은 것은 많은 인구 중 단일 값입니다 (예 : 수십만 개의 단일 고객 ID - 이러한 인덱스가 반드시 사용됩니다.

매우 제한된 수의 값만있는 성별 (2 개 값만) 또는 다른 것들은 일반적으로 색인에서 제대로 작동하지 않습니다. 적어도 독자적으로이 열은 다른 색인에 두 번째 또는 세 번째 열로 포함될 수 있습니다.

그러나 인덱스가

  • 가, 다시 쿼리를 실행
  • 을 인덱스를 만들 자신의 실행 계획을 확인하기 전에 감각

    • 측정하는 쿼리 수 있는지 여부를 정말 유일한 방법은 밖으로 찾을 수 , 그들의 타이밍을 측정하십시오.

    인덱스가 사용되거나 무시되는 규칙은 없습니다. 너무 많은 변수가 그 결정에 사용됩니다. 인덱스를 처리하는 방법에 대한 몇 가지 전문적인 조언을

    , 그리고 사용되지 수있는 인덱스를 찾는 방법, 그리고 그것을 인덱스를 생성하는 것이 합리적 때, 킴벌리 트립의 블로그 게시물을 참조하십시오

  • +0

    나는 3 개의 interger 값을 가진 테이블을 가지고 있으며 모두가 독점적입니다. 그 선택성은 95 % 이상입니다. 그리고이 테이블은 대부분 select 문에서만 사용됩니다. 그렇다면 인덱스를 작성하는 것이 쉽지 않을까요? – Paresh

    +0

    95 %의 선택적 의미? 일반적으로 매우 낮은 선택성이 필요합니다. 하나의 값 (ID = 55)은 최소의 행만 선택하면됩니다. 해당 시나리오의 선택률 (필드의 주어진 값에 대해 선택되는 총 행 수의 백분율)이 1 % 미만인 경우에도 5 % 미만이거나 그 이상인 경우 인덱스를 만드는 것이 좋습니다. –

    +0

    "성별과 같은 것 (2 가지 값만 있습니다)"이 이제 2018이므로이 부분은 오래된 것입니다. 성별은 VARCHAR (255)이어야합니다. 개인적으로 아파치 공격 헬리콥터로 확인합니다. –

    0

  • Spring cleaning your indices (part 2)
  • 나는 SQL 서버에 대해 잘 모르겠지만, 대부분의 DBMS는 검색을위한 인덱스를 사용하지 않는 내가 f를 사용하면 단일 I/O에서 모든 테이블 행을 검색 할 수 있습니다. PLAN 설명에서이를 볼 수 있으며 일부 테이블은 항상 스캔 된 테이블 공간입니다.

    IMHO, DBMS가 서버에서 실행중인 경우 5000 행 미만의 테이블은 카디널리티를 분석 할 가치가 없습니다.

  • 2

    대부분의 DBMS는 데이터 및 코드 (저장 프로 시저, 실행 계획 등)에 캐시을 사용합니다. SQL 서버에서 나는 및 프로 시저 캐시데이터라고 생각하고, 오라클, 그것은 버퍼 캐시SGA라고. 표 데이터 및/또는 색인은 캐시에있을 수 있습니다.

    자주 액세스되는 작은 테이블은 캐시에 들어갈 가능성이 큽니다. 그러나 쿼리가 디스크에서 새로운 데이터를로드하는 경우 테이블은 캐시에서 제거 될 수 있습니다. 테이블에 이 영구적으로 캐시에 저장되도록 지정하는 옵션은입니다 (PINTABLE 참조).테이블이 아주 작은 경우 색인을 사용하는 것이 더 나은 전략 일 수 있습니다 (귀하의 경우). 색인을 추가하면 (캐시에 항상있을 수도 있음) 더 도움이 될 수 있지만, 무엇이 이득이 될지 모르겠습니다.

    성능면에서 큰 차이점은 디스크 액세스 대 메모리 액세스입니다. 인덱스의 목적은 디스크에서 읽을 데이터의 양을 줄이는 것이지만, 이미 메모리에 있다면 이득이 적을 수 있습니다.

    관련 문제