>  기사  >  데이터 베이스  >  Oracle은 어떻게 인덱스를 무효화합니까?

Oracle은 어떻게 인덱스를 무효화합니까?

WBOY
WBOY원래의
2022-01-26 10:25:3711137검색

oracle 인덱스 실패 이유: 1. WHERE 절을 사용하지 않음 2. "IS NULL" 및 "IS NOT NULL" 사용 3. WHERE 절에 함수 사용 5. 퍼지 쿼리 사용 WHERE 절의 불평등 연산 6. 일치하지 않는 데이터 유형 등을 비교합니다.

Oracle은 어떻게 인덱스를 무효화합니까?

이 튜토리얼의 운영 환경: Windows 10 시스템, Oracle 11g 버전, Dell G3 컴퓨터.

oracle은 어떻게 인덱스를 무효화합니까?

Oracle 인덱스의 목표는 전체 테이블 스캔을 방지하고 쿼리 효율성을 높이는 것이지만 때로는 역효과를 낳을 때도 있습니다.

예를 들어, 테이블에 수백만 개의 데이터가 있고 특정 필드에 인덱스를 추가했지만 쿼리 성능이 향상되지 않는 경우 이는 Oracle 인덱스의 오류 때문일 수 있습니다. Oracle 인덱스에는 몇 가지 제한 사항이 있습니다. 이러한 인덱스 제한 사항을 위반하면 인덱스를 추가했더라도 Oracle은 인덱스를 추가하지 않은 것에 비해 쿼리 성능이 향상되지 않을 수 있습니다. 데이터베이스에 인덱스를 유지하는 시스템 오버헤드로 인해 성능이 저하됩니다. 다음은 Oracle 인덱스 실패를 유발할 수 있는 7가지 제약 조건을 요약한 것입니다.

1. WHERE 절 없음

2. IS NULL 및 IS NOT NULL을 사용하세요.

SELECT ... FROM emp WHERE comm IS NULL은 WHERE 절입니다.

에서 함수 사용 함수 기반 인덱스를 사용하지 않는 경우 where 절의 인덱스 열에 함수를 사용하면 최적화 프로그램이 이러한 인덱스를 무시하게 됩니다. 예를 들어

select * from staff where trunc(birthdate) = '01-MAY-82';

하지만 해당 조건에 함수를 적용하면 인덱스가 적용됩니다. 위의 문장을 다음 문장으로 변경하시면 인덱스를 통해 검색하실 수 있습니다.

select * from staff where birthdate < (to_date(&#39;01-MAY-82&#39;) + 0.9999);

참고: Oracle은 여전히 ​​MIN, MAX 함수에 대해 인덱스를 사용합니다.

4. 퍼지 쿼리에는 LIKE '%T'를 사용하세요.

5. WHERE 절에 불평등 연산을 사용하세요.

불평등 연산에는 a8093152e673feb7aba1828c43532094, !=, NOT colum >= ? , NOT colum <= ?

이 제한은 OR로 대체될 수 있습니다. 예: colum a8093152e673feb7aba1828c43532094 0 ===> colum>0 OR colum<0

6.

SELECT emp_id, emp_m, salary_q ... FROM emp WHERE job=&#39;manager&#39; AND deptno>10
job과 deptno를 사용한 병합은 모두 고유하지 않은 인덱스입니다. 이 조건에서 Oracle은 인덱스를 병합하지 않고 첫 번째 인덱스만 사용합니다.

7. 일치하지 않는 데이터 유형 비교

dept_id는 varchar2 필드이지만 다음 명령문은 전체 테이블 스캔을 수행합니다.

select * from dept where dept_id = 900198;

오라클이 자동으로 where 절을 to_number(dept_id)=900198로 변환하기 때문입니다. 이는 인덱스 사용을 제한하는 함수를 사용하는 것과 동일합니다. 올바른 작성 방법은 다음과 같습니다.

select * from dept where dept_id = &#39;900198&#39;;

추천 튜토리얼: "

Oracle Video Tutorial

"

위 내용은 Oracle은 어떻게 인덱스를 무효화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.