시간 차원 테이블에서 인덱스를 어디에 두어야합니까?


10

이 웹 사이트에서 색인에 대한 질문과 답변을 읽은 후 질문이 떠 올랐습니다.

더 낮은 수준의 세분성을 가진 시간 차원 테이블을 사용하는 경우 어떻게됩니까? 인덱스를 어디에 두어야합니까?

질문에서 랜디 멜더 : “인덱스”는 RDBMS에서 무엇을 의미합니까? 말했다 :

색인을 "목차"로 생각하십시오. 파일의 위치에 대한 포인터의 정렬 된 목록입니다.

시간 차원의 경우, 대부분의 데이터 조사는 시간표가 하루 종일 고유 한 연도 를 저장하는 경우 특정 날짜, 특정 주, 특정 월 또는 특정 분기에 대해 수행 될 수 있습니다 .

내 질문은 : 모든 필드에 인덱스를 넣어야합니까?

Day는 독특하다고 가정 하므로이 인덱스의 사용을 완벽하게 이해합니다. 그러나 주 ID는 7 건 , 월 ID는 30/31 건 , 1/4 ID는 120 건 정도 발생 합니다.

  • 여전히 해당 필드에 대한 인덱스를 넣어야합니까?
  • 여전히 유용합니까?

같은 질문으로 David Spillett이 말했습니다.

인덱스를 저장하는 데 사용되는 추가 공간 (및 DB에서 쓰기 작업이 많은 경우 인덱스를 유지하기위한 IO로드)이 약간 덜 최적화 된 읽기 쿼리보다 문제가 될 수 있으므로 너무 많은 인덱스를 추가하는 것은 물론 최적화가 좋지 않을 수 있습니다. 과도하게하지 마십시오.

그렇다면 시간 차원의 경우 가장 고려해야 할 사항은 무엇입니까?

답변:


7

쓰기 문제의 문제에 부딪치지 않을 것입니다.이 문제는 한 번 (또는 일년에 한 번) 생성되고 만지지 않는 것으로 가정하기 때문입니다.

그러나 주별로 검색하는 경우 인덱스를 사용하는 것이 방해가 될 수 있습니다 ... 문제는 인덱스를 사용하는 경우 먼저 스캔 한 다음 테이블에서 각 레코드를 개별적으로 가져올 수 있다는 것입니다. 레코드의 약 5-20 % 이상을 다시 가져 오면 일반적으로 전체 테이블 스캔을 수행 한 다음 관심없는 레코드를 삭제하는 것이 더 빠릅니다.

데이터가 잘 분산되어있을 때 이것을 최적화하지 않는 주요 RDBMS를 모릅니다. 잘 분산되지 않은 경우 (예 : 열의 값 중 하나가 시간의 95 % 발생하지만 다른 가능한 값도있는 경우) 테이블에서 히스토그램을 계산하고 검색시 값에 자리 표시자를 사용 하지 않아야 할 수 있습니다 . 쿼리 최적화 프로그램이 실행 계획을 생성 할 때 검색되는 값을 갖도록합니다.

요일을 색인 하지 않을 것 입니다. 데이터베이스의 설명서에서 인덱스 읽기와 전체 테이블 스캔에 대한 트레이드 오프가 무엇인지 확인하여 월 또는 일의 월을 인덱싱했는지 확인했습니다. 존재하는 경우 DOY / 일의 색인을 생성 할 가능성이 높습니다 (어쨌든 귀하의 고유 색인 인 것처럼 들립니다)


5

인덱스가 유용하기 위해 고유하지 않아도되므로 대답은 에 따라 다릅니다 . 인덱스가 있으면 쿼리에 도움이되는 경우 추가 할 가치가 있습니다. 시간 열과 관련하여 특별한 지침이 있어야한다는 것을 모르겠습니다. 다른 열처럼 취급하고 쿼리 유용성에 따라 색인을 생성하십시오.


나 외에 다른 사람이 데이터베이스와 관련하여 "그것에 의존한다"라고 말하거나 읽을 때마다 Paul Randal의 목소리를 듣습니까? : p
AndrewSQL

3

일반적으로 인덱스가 선택적으로 선택 될수록 (선택성은 열의 고유 값 수를 테이블의 행 수로 나눈 값으로 정의 됨), 쿼리시 엔진이 인덱스를 사용할 가능성이 높습니다 where 절에서 열을 사용합니다.

열 인덱싱을 고려하는 경우 전후에 인덱싱 된 열에서 쿼리 선택을 실행하고 실행 계획을 보면 인덱스가 사용 중인지 여부와 사용중인 경우 인덱스가 얼마나 도움이되는지 알려줍니다. 테스트에 사용하는 쿼리는 응용 프로그램에서 사용하는 것이 이상적입니다.


1

지금까지 경험 한 바에 따르면 작업하는 동안 개발 데이터베이스에 인덱스를 전혀 넣지 않는 것이 좋습니다. 프로덕션 데이터베이스가 커지면 데이터베이스 로깅을 사용 하고 EXPLAIN인덱싱이 필요한 항목을 파악한 다음 필요한 인덱스 만 만듭니다. 데이터베이스 사용량이 점진적으로 증가하고 인덱스 수를 낮게 유지하는 한 제대로 작동합니다.

데이터베이스의 데이터를 분석 할 때는 일반적으로 프로덕션에서 일반적이지 않은 요청의 속도를 높이기 위해 추가 인덱스를 추가해야합니다. 항상 프로덕션 데이터베이스의 복사본에서이 작업을 수행하므로 이러한 인덱스는 프로덕션 자체에 추가되지 않습니다.

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