Bind Peeking: Histogram이 존재하는 경우에는 최초에 어떤 값이 Bind변수에 사용되느냐에 따라 실행계획이 결정된다. 또한 Hard Parse가 이루어질 때, 어떤 값이 주어졌느냐에 따라 실행계획이 매번 변할 수 있다. 이런 이유로 많은 System에서 Bind Peeking을 비활성화한다.(_OPTIM_PEEK_USER_BINDS를 FALSE로 변경)
Density의 변화: Height-Balanced Histogram의 경우에는 Non Popular Value나 Bind변수로 이루어진 Predicate에 대해 Density를 사용한다. Density의 변화는 Selectivity의 변화를 초래하고, Cardinality의 변화를 초래한다.
Join Cardinality의 변화: where절에 Join Predicate를 제외한 아무런 조건이 없는 경우에도 실행계획이 바뀔수 있다.(p.367)
Distinct Count
Histogram은 Distinct Count가 낮은 Column에 대해서만 유용한것 아닌가?
Distinct Count는 Histogram과 전혀 무관하며, Histogram의 존재의 의의는 Data의 Skewness에 의해서만 결정된다.
Index Scan vs. Table Full Scan
Index가 없는 Column에 대해 Histogram이 도대체 왜 필요한가?
Histogram의 존재의 목적은 Cardinality의 정확성을 높이는 것이다. Index를 경유하느냐 Table Full Scan을 하느냐는 Cardinality에 결정되는 결과일 뿐 목적이 아니다.
Histogram은 전지 전능한가?
Histogram은 Bucket내에 존재하지 않는 값에 대한 Cardinality는 부정확하다.
Bind변수를 사용하면서 Bind Peeking을 비활성화 한경우에도 부정확하다.
Height-Balanced Histogram의 경우에는 특정 값이 Popular Value로 분류되는냐, Non Popular Value로 분류되느냐에 따라 Cardinality에서 큰 차이가 날 수 있다.
=> Histogram은 많은 장점을 제공하나 많은 한계점도 존재하므로, 한계점을 명확히 인지하고 사용해야한다.