데이터베이스 성능에 대한 인덱싱 및 클러스터 인덱싱이 얼마나 중요합니까?

StackOverflow https://stackoverflow.com/questions/403393

  •  03-07-2019
  •  | 
  •  

문제

최근 데이터베이스 인덱싱 및 클러스터 인덱싱에 대한 몇 가지 질문이 있었으며 지난 몇 주까지 나에게 새로운 것이 었습니다. 나는 그것이 얼마나 중요한지, 그리고 그것을 창조함으로써 어떤 종류의 성과 이익을 기대할 수 있는지 궁금했습니다.

편집하다: 처음 시작할 때 클러스터 된 인덱스를 넣을 때 보는 가장 좋은 유형의 필드는 무엇입니까?

도움이 되었습니까?

해결책

아주 아주(G,G) 중요한. 제 생각에는 현명한 인덱싱은 DB 성능 최적화에서 가장 중요한 것입니다.

이것은 단일 답변으로 다루는 쉬운 주제가 아닙니다. 좋은 색인화는 데이터베이스에서 쿼리에 대한 지식이 필요하므로 많은 트레이드 오프를 만들고 특정 DB 엔진에서 특정 인덱스의 의미를 이해해야합니다. 그럼에도 불구하고 그것은 매우 중요합니다.

편집하다: 기본적으로 클러스터 된 인덱스는 일반적으로 길이가 짧아야합니다. 범위를 반영하는 쿼리로 만들어야합니다. 중복 항목이 없어야합니다. 그러나이 지침은 매우 일반적이며 결코 옳은 것은 아닙니다. 올바른 것은 실행될 쿼리를 분석하는 것입니다. 실행 계획을 신중하게 벤치마킹하고 분석하고 최선의 방법을 이해합니다. 이것은 수년간의 경험과 지식이 필요하며 결코 단일 단락에서 설명 할 것이 아닙니다. DB 전문가를 전문가로 만드는 것은 주요한 일입니다 (유일한 것은 아니지만 동시성 문제, 가용성 등과 같은 다른 중요한 것들에 원시적입니다!)!

다른 팁

인덱싱 : 매우 중요합니다. 잘못된 인덱스를 사용하면 쿼리가 더 어려워지고 때로는 현명한 시간에 완료 할 수없는 시점까지.

인덱스는 또한 삽입 성능 및 디스크 사용에 영향을 미치므로 큰 테이블에 불필요한 인덱스를 많이 유지하는 것도 나쁜 생각입니다.

클러스터링은 생각할 가치가있는 것입니다. 특정 데이터베이스의 동작에 실제로 의존한다고 생각합니다. 데이터를 올바르게 클러스터링 할 수 있다면 메모리가 아닌 행에 대한 요청을 충족시키는 데 필요한 IOP의 양을 크게 줄일 수 있습니다.

적절한 인덱스가 없으면 RDBMS가 테이블 스캔을 수행하여 무엇이든 쿼리해야합니다. 몹시 비효율적입니다.

나는 또한 당신이 관계형 디자인의 기본 죄인 기본 키가 없다고 추론합니다.

테이블에 많은 행이 포함되어있을 때 인덱싱이 매우 중요합니다.
몇 가지 RW를 사용하면 인덱스없이 성능이 더 좋습니다.
더 큰 테이블을 사용하면 좋은 성능을 얻는 데 매우 중요합니다.
그것들을 정의하기는 쉽지 않습니다. 클러스터링 된 것은 데이터가 클러스터 된 인덱스 순서로 저장된다는 것을 의미합니다.
색인의 좋은 힌트를 얻으려면 Toad를 사용할 수 있습니다.

인덱싱입니다 매우 중요합니다.

쿼리에 대한 올바른 색인은 성능을 크게 향상시킬 수 있습니다. 요술.

다른 답변이 말했듯이, 인덱싱은 중요합니다.

다른 답변에서 추론 할 수 있듯이 클러스터 된 인덱싱은 훨씬 덜 중요합니다.

괜찮은 인덱싱은 첫 주문 성능 이득을 제공합니다. 순서는 일반적입니다.

클러스터 인덱싱은 2 차 또는 증분 성능 이득입니다. 일반적으로 성능 증가의 작은 (<100%) 비율을 제공합니다.

(우리는 또한 '100% 성능 이득이란 무엇입니까'에 대한 의문을 제기합니다. 저는 백분율을 ((Oldtime -Newtime)/Newtime으로 해석하고 있습니다. * 100이므로 이전 시간이 10 초이고 새로운 시간이 5입니다. 몇 초, 성능 증가는 100%입니다.)

DBMS마다 클러스터 된 인덱스의 의미에 대한 해석이 다릅니다. 조심하십시오. 특히, 일부 DBMS는 데이터를 한 번 이후에 클러스터링 한 후 클러스터링이 데이터가 다시 클러스터 될 때까지 시간이 지남에 따라 붕괴됩니다. 다른 사람들은 클러스터링을보다 적극적으로 볼 수 있다고 생각합니다.

클러스터 된 인덱스는 usustally이지만 항상 기본 키는 아닙니다. 클러스터 된 인덱스를 보는 한 가지 방법은 클러스터 된 인덱스의 값에 따라 물리적으로 주문되는 데이터를 생각하는 것입니다.

이것은 실제로는 그렇지 않을 수 있지만, 클러스터 된 인덱스를 강화하여 어쨌든 다음과 같은 성능 보너스를 얻습니다.

  1. 테이블의 모든 열은 커버링 인덱스 내에 포함 된 것처럼 클러스터 된 인덱스 히트에서 해결할 때 무료로 액세스 할 수 있습니다. (테이블 자체의 데이터 페이지를 굴절시키지 않고 인덱스 데이터 만 사용하여 해결할 수 있습니다)

  2. 중간 처리없이 클러스터 된 인덱스에 대해 업데이트 작업을 직접 수행 할 수 있습니다. 테이블에 대해 많은 업데이트를하고 있다면 클러스터 된 열을 강화하고자합니다.

  3. 구현에 따라 디스크에 저장된 데이터가 더 적은 비싼 디스크 구매 작업으로 더 빨리 리 레드 리그를받는 순차적 액세스 이점이있을 수 있습니다.

  4. 구현에 따라 간단한 추측 게임 알고리즘을 통해 데이터 액세스를 해결할 수 있으므로 물리적 인덱스가 필요하지 않은 경우 무료 인덱스 혜택이있을 수 있습니다.

#3과 특히 #4에 의존하지 마십시오. #1과 #2는 대부분의 RDBMS 플랫폼에서 안전한 안전한 베팅입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top