아주 작은 테이블 (최대 1000 행)에 인덱스를 사용해야하는 이유가 있습니까? 빨강 /

응용 프로그램 개발 중에 제품의 신선 / 썩음, 빨강 / 녹색 / 파랑과 같이 “개체”의 속성을 보유하는 “소량”의 데이터 (보통 10-40 값, id+ value및 때로는 type)를 저장하는 많은 테이블이 있습니다 .

전자 부품을 신선하게 만들 수없고 산소 가스를 붉게 할 수없고 테이블의 행 수를 무제한으로 가질 수 없기 때문에이 속성을 제품 테이블에 넣지 않습니다.

속성을 저장하기 id위해 2-3 필드가있는 사용자 정의 작은 테이블을 사용합니다. 링크, name응용 프로그램에 표시하기 위해 그리고 type속성이 동일한 범주에 속하는 경우 언젠가 .

기본 “개체”는 다 대다 중간 테이블을 통해 속성에 연결됩니다.

1000 개 미만의 항목 (보통 10-40)으로 “작은 사전”에 대한 색인을 작성하고 유지해야하는 이유가 있습니까?

내 목표 데이터베이스는 Oracle이지만 공급 업체에 독립적으로 답변하기를 바랍니다 …

나는 채 웁니다-아니요.



답변

일반적으로 그렇습니다. 인덱스가 없으면 액세스 패턴은 모든 행 을 검사 하여 필요한 것인지 아닌지 확인해야합니다. 문제는 테이블 크기가 아니라 동시성입니다. 격리 수준에 따라 스캔은 커밋되지 않은 트랜잭션을 차단하여 궁극적으로 ‘관심없는’행이 잠금 해제 될 때까지 기다릴 수 있습니다. 스캔은 모든 행을 ‘보도록’보장되므로 모든 스캔은 모든 쓰기 (삽입, 삭제 또는 업데이트)를 차단 합니다. 오라클은 스냅 샷 격리를 기본값으로 설정하는데,이 상황에서는 차단이되지 않지만 다른 벤더는 다른 것을 기본으로합니다. 읽기하는 노력에 SQL 서버는 기본적으로 표시됩니다 않는 블록을.

인덱스가 있으면 액세스 패턴이 원하는 행 범위 (원하는 키 범위 내) 만 확인하므로 잠금 충돌에 부딪 칠 수있는 순수한 통계적 기회가 크게 줄어 듭니다.