직원과 관련된 모든 데이터가 포함 된보기가 있습니다. 약 350k 개의 레코드가 있습니다. 이름 검색 기능을 만들어야합니다. 입력 한 키워드와 일치하는 모든 데이터를 검색합니다.oracle에서 문자열 검색 최적화
쿼리 성능이 매우 느리며 데이터를 검색하는 데 15-20 초가 걸립니다. 비용 15000
내 쿼리 : EMPLOYEE_BASIC_DTLS 이후
SELECT H.PERSON_ID,
B.EMPLOYEE_ID,
INITCAP(B.FIRST_NAME) EMP_FNAME,
INITCAP(B.MIDDLE_NAME) EMP_MNAME,
INITCAP(B.LAST_NAME) EMP_LNAME,
B.EMPLOYEE_TYPE PERSON_DESC,
B.EMPLOYMENT_STATUS STATUS_TYPE,
EA.BASE_BRANCH
FROM EMPLOYEE_BASIC_DTLS B,
EMP_ASSIGNMENT_DTLS_MV EA,
EMPLOYEE_HIS_DEPNDENT_TBL H
WHERE B.PERSON_ID = EA.PERSON_ID
AND B.PERSON_ID = H.PERSON_ID
AND ((UPPER(B.FIRST_NAME) LIKE
('%' || V_SEARCH_PARAM1 || '%')) OR
(UPPER(B.MIDDLE_NAME) LIKE
('%' || V_SEARCH_PARAM1 || '%')) OR
(UPPER(B.LAST_NAME) LIKE
('%' || V_SEARCH_PARAM1 || '%')))
AND TRUNC(SYSDATE) BETWEEN EA.EFFECTIVE_START_DATE AND
EA.EFFECTIVE_END_DATE
AND UPPER(H.RELATIONSHIP_CODE) = 'A';
내가 색인을 사용하지 못할 전망이다.
모든 표현식에 와일드 카드가 필요합니까? "저스틴 동굴"을 "스틴 (stin)"으로 타이핑 할 때 정말로 원하는 사람들이 있습니까? 주요 와일드 카드는 기본 테이블의 모든 인덱스가 사용되는 것을 방지합니다. 주요 와일드 카드가 정말로 필요하다면 Oracle Text 색인을 사용하고 쿼리를 리팩터링하여 잠재적으로 LIKE가 아닌 CONTAINS를 사용할 수 있지만 그 또한 다소 복잡합니다. –