Oracle에서는 "select status from user_indexes where index_name='index name';" 문을 사용하여 인덱스가 유효하지 않은지 여부를 확인할 수 있습니다. 반환된 결과가 VALID이면 인덱스가 유효하지 않음을 의미합니다. 이는 인덱스가 유효하지 않음을 의미합니다.
이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.
구문은 다음과 같습니다.
select status from user_indexes where index_name='索引名称';
반환 결과가 VALID이면 인덱스가 유효하다는 뜻입니다!
예제는 그림에 나와 있습니다.
확장 지식:
인덱스 실패에 대한 솔루션
1 적합한 Oracle 최적화 프로그램 선택
3가지 유형의 Oracle 최적화 프로그램이 있습니다.
a. ( 규칙 기반) b. COST(비용 기반) c.
init.ora 파일에서 RULE, COST, CHOOSE, ALL_ROWS, FIRST_ROWS와 같은 OPTIMIZER_MODE 매개변수의 다양한 선언을 통해 기본 최적화 프로그램을 설정합니다. 물론 SQL 문 수준이나 세션 수준에서도 이를 재정의할 수 있습니다.
비용 기반 최적화 프로그램(CBO, Cost-Based Optimizer)을 사용하려면 분석 명령을 자주 실행하여 데이터베이스의 개체 통계 정확도를 높여야 합니다.
데이터베이스의 최적화 모드가 선택(CHOOSE)으로 설정된 경우 실제 최적화 모드는 분석 명령이 실행되었는지 여부와 관련됩니다. 테이블이 분석되면 최적화 모드는 자동으로 CBO가 됩니다. 그렇지 않으면 데이터베이스는 최적화 프로그램의 RULE 형식을 사용합니다.
(테이블 분석
analyze table PROD_PARTS compute statistics; ANALYZE TABLE PROD_PARTS COMPUTE STATISTICS FOR ALL INDEXED COLUMNS; analyze table PROD_PARTS compute statistics for table for all indexes for all indexed columns;
) [인덱스 실패 후 DBA와 상담한 결과 데이터 통계에 문제가 있다는 것을 발견했습니다. 구체적인 해결책은 위 명령문을 실행하는 것입니다.]
기본적으로 Oracle은 CHOOSE를 사용합니다. 불필요한 전체 테이블 스캔을 피하기 위해서는 CHOOSE 최적화 프로그램의 사용을 지양하고 규칙 기반 또는 비용 기반 최적화 프로그램을 직접 사용하도록 노력해야 합니다.
2.인덱스 재구축
alter index 索引名 rebuild 【online】
3. 강제 인덱스
문에 힌트를 추가한 후 'RECORD_ENTITYID'를 사용하도록 강제합니다. 인덱스
Quote
select /*+ index(record,record_entityid) */ * from RECORD where entityId='24' and entityType='blog';
/*+ index ( Record,record_entityid) */, index 는 인덱스 강제 사용을 의미하고, Record 는 테이블 이름, Record_entityid 는 인덱스 이름입니다. 실행 계획은 테스트 데이터베이스와 일치하며 둘 다 'RECORD_ENTITYID' 인덱스를 사용하고 논리적 읽기 및 쓰기도 4입니다.
추후 테스트 후, 힌트 추가 없이 테이블과 두 인덱스를 분석한 후 'RECORD_ENTITYID' 인덱스도 사용할 수 있습니다. 다만, 테이블이 자주 업데이트 되기 때문에 다시 분석하는데 얼마나 걸릴지 모르겠습니다
추천 튜토리얼: "
Oracle Video Tutorial위 내용은 Oracle은 인덱스가 유효하지 않은지 어떻게 확인합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!