처음으로 사용자 정의 함수에서 함수 기반 인덱스를 사용하고 있습니다. 인덱스를 사용할 수없는 경우 성능 문제가 발생했습니다.인덱스 액세스를 사용하지 않을 때 함수 기반 인덱스
내부적으로 함수 기반 인덱스는 내 함수가 varchar2를 반환하므로 숨겨진 테이블 열 (varchar2 (4000) 유형)을 생성하고 색인을 생성하는 것으로 보입니다. 인덱스가 사용될 때 제대로 작동하지만 필터로 함수를 사용하여 전체 테이블 스캔을 수행해야하는 경우가 있습니다.이 경우 필자는 6의 성능 저하를 봅니다.이 경우 Oracle은 사용하지 않습니다 숨겨진 열이 있지만 각 행에 대한 함수를 다시 계산하면 IO 바인딩 대신 CPU 바인딩이 수행됩니다.
오라클이 숨겨진 열을 필터링에도 사용할 수있는 방법이 있습니까? 내가 그 라인을 따라 몇 가지 재 작성 옵션이나 뭔가를 놓치고 있는지 궁금해.
그렇지 않은 경우 열을 직접 정의하고 트리거를 사용하여 최신 상태로 유지해야합니다. 투명성과 유지 보수 용이성을 위해 함수 기반 색인을 사용하는 것이 더 좋습니다.
"숨겨진 열"이 테이블 자체에 저장되지 않았기 때문에 까다로울 것입니다. 색인을 구성하는 요소입니다. 테이블 스캔 중에는 사용할 수 없습니다. 오라클이 사전 계산 된 데이터를 얻기 위해 인덱스를 통과해야합니다 (또는 적어도 어떻게 든 결합하십시오). – Thilo
컬럼이 실제로 존재하지 않는다면, 나는 두 세계에서 최고를 가질 수 없다는 것이 분명합니다. 방금 dba_tab_cols를보고 _real_, 숨겨진 열이 있다고 생각했습니다. 색인을 작성하기위한 가상 구조 일 뿐이므로 내 질문에 대한 대답입니다. 즉, 검색을위한 실제 열이 필요합니다. – Chris
글자 그대로, 인덱스 * 안에 구체화 된 형태로 존재한다는 것이 현실입니다. 즉, 계산 된 데이터가있는 정의 인 가상 열과는 달리 뷰의 파생 열과 동일합니다. – Thilo