Oracle DB의 일부 인덱스에 대해 blevel이 null 인 이유는 무엇입니까?

인덱스에 대한 B- 트리 수준을 확인하려고했는데 놀랍게도 일부는 null로 설정되어 있습니다.

SELECT index_name, blevel FROM user_indexes ORDER BY 2 desc; 

이름은 “SYS_”로 시작합니다 (아래 사진 첨부). 그래서 나는 그것들이 시스템 생성 인덱스라고 가정하고 있습니까? 아마도 기본 키일까요? 왜 그들이 null인지 궁금합니다. 값이 0이면 모든 것이 리프 노드에 있고 고유 한 스캔이 데이터를 가져 오는 데 1 홉이 소요됨을 의미합니다.

여기에 이미지 설명을 입력하세요.

댓글

  • 시스템 스키마 개체처럼 보이므로 자신의 규칙에 따라 플레이 할 수 있습니다. 그러나 가장 가능성있는 대답은 노드가 전혀 없다는 것입니다.
  • *_indexes 문서에있는 많은 통계 열 (blevel 포함)의 경우 " 열 이름 뒤에 별표가 오는 것은 ANALYZE 문 또는 DBMS_STATS 패키지를 사용하여 인덱스에 대한 통계를 수집하는 경우에만 채워집니다. " 엔진이 ' 일부 또는 모든 시스템 테이블 인덱스에 대해 이러한 명령 중 하나를 실행하지 않는 것 같습니다 …
  • 저것들은 lob 인덱스이며 lob 인덱스의 속성 일 수 있습니다. 수집을 시도 할 수 있지만 오라클이 내부적으로 어떤 작업을 수행할지 잘 모르겠습니다.

답변

SYS_IL..로 시작하는 이름은 LOB 인덱스입니다.

BLEVEL는 B- 트리 인덱스의 속성이며 그렇지 않습니다. LOB 인덱스에 적합합니다.

통계를 수집하더라도 이러한 인덱스에 대한 BLEVEL는 null로 유지됩니다.

답변

@Balazs에게 정보를 제공해 주셔서 감사합니다.

이에 대한 조사를했는데 다음과 같이 보입니다.-

lob은 단순히 포인터이며 해당 lob을 만드는 데이터 덩어리를 가리 킵니다. 따라서 lob 열을 만들 때 자동으로 lob 인덱스를 가져 와서 lob 데이터 청크를 더 빠르게 검색하고이 데이터 청크를 보유하는 세그먼트를 확인합니다.

다음 쿼리를 사용하여 동일한 지 확인합니다.-

SELECT index_name,INDEX_TYPE, blevel FROM user_indexes where blevel is null and index_name like "SYS_IL%%" ORDER BY 3 desc; 

연결된 세그먼트를 보려면-

select segment_name, segment_type, tablespace_name, bytes, max_extents from user_segments where segment_name in ( SELECT index_name FROM user_indexes where blevel is null and index_name like "SYS_IL%%" ); 

LOB 열이있는 테이블을 삭제하거나 열 자체입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다