매우 커질 가능성이있는 테이블에서 정기적으로 여러 번 실행되는 쿼리가 있습니다. 빨리 쿼리를 처리 할 수있는 인덱스를 갖고 싶습니다. 나는 인덱스에 익숙하지 않다하지만 지금까지 내가 가진 다음 쿼리 및 인덱스 :오라클 - 특정 쿼리와 일치하는 테이블 인덱스를 만드는 방법은 무엇입니까?
update PERMISSION
SET EXPIRED_FLAG=1
where CASE WHEN VAL_END IS NULL THEN 1 ELSE 0 END =1
AND CURRENT_FLAG=1
AND SYSDATE+SUBSTR(TO_CHAR(SYSTIMESTAMP, 'TZR'),2,2)/24> VAL_START+30/1400
AND EXPIRED_FLAG=0;
내 인덱스 보이는 같은 :
CREATE INDEX NDX_VAL_DB_CLOSE ON PERMISSION
(CURRENT_FLAG, CASE WHEN VAL_END IS NULL THEN 1 ELSE 0 END, CASE WHEN EXPIRED_FLAG=0 THEN EXPIRED_FLAG END)
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 1M
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
LOGGING
LOCAL (
PARTITION NDX_VAL_FKTICKET_ID_PRT1
LOGGING
NOCOMPRESS
TABLESPACE IDX_PRT_01
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 1M
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
),
PARTITION NDX_VAL_FKTICKET_ID_PRT2
LOGGING
NOCOMPRESS
TABLESPACE IDX_PRT_02
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 1M
NEXT 1M
MAXSIZE UNLIMITED
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
)
NOPARALLEL;
실행 계획 :
I 내 색인이 실제로 검색어와 일치하는지 파악하고 싶습니다. 실행 계획을 살펴보면 내 인덱스가 사용되고있는 것으로 보이지만 인덱스 조건이 의미가 있으며 업데이트 쿼리와 완전히 일치하는지 100 % 확신하지 못했습니다. 인덱스에 실제로 수행하여 쿼리와 일치 시키거나 인덱싱 된 모든 열을 이미 사용하고 있습니까? (다시, 나는 완전히 색인 생성에 익숙하지 않으며 이것은 분할 된 테이블이므로 약간 분실 됨)
다양한 조건부가 얼마나 선택적입니까? 내 생각에 다양한 1/0 술어는 특별히 선택적인 것이 아니며 'val_start'는 쿼리에서 유일하게 합리적으로 선택적인 술어입니다. 즉,'val_start' 술어가 실질적으로 업데이트해야하는 행 수를 줄이고 다른 술어는 많이 수행하지 않는다고 생각합니다. 하지만 그건 내가 추측 한 것입니다. 당신은 당신의 데이터를 압니다. 테이블은 어떻게 파티셔닝됩니까? –
이 표에서 대부분의 항목은 만료 된 플래그 = 1을 가지며 일부만 선택하면 = 0이되고 적은 경우가 30 분을 넘지 않게됩니다. 현재 플래그에 파티션에 관해서는, 너무 익숙하지 않은 프로세스에 의해 제어되지만 시간이지나면서 더 많은 항목이 추가되면 현재의 0 대신 현재의 두 번째 파티션으로 이동되는 항목이 더 많이 추가됩니다. = 1 내가 관심있는 활성 파티션에서. –
실제 쿼리는 여기 있습니다.이 인덱스는 업데이트 쿼리의 컨텍스트를 고려하여 표시되고 실제로 표시된 업데이트 쿼리에서 사용되는 모든 매개 변수 (조건 자)입니다. –