Oracle Exadata로 UPDATE 또는 DELETE하고 싶은 경우의 고속화 방법

1792 단어 오라클SQLexadata
Oracle Exadata에서 일부 데이터를 UPDATE, 혹은 DELETE 하고 싶은 경우, 소량의 데이터이면 문제 없습니다만, 대량 데이터라면 성능에 영향이 있어 SQL이 전혀 돌아오지 않는 경우가 있습니다.
파티셔닝되고 있는 테이블이라면, 아래의 EXCHANGE를 사용한 방법에 의해 그것들을 고속화하는 것이 가능합니다.

예를 들어, 아래와 같은 파티셔닝되고 있는 테이블이 있어, 그 파티션내의 일부 데이터를 DELETE 하고 싶은 경우를 상정.



우선 대상 파티션의 건수 확인


SELECT COUNT(1) FROM SAMPLE_SCHEMA.HOGE_TABLE PARTITION(P_201902);

+-----------+
| COUNT(1)  |
+-----------+
|        5  |
+-----------+

CTAS에서 교환을 위한 임시 테이블 생성. 이 때 DELETE하고 싶은 데이터를 임시 테이블에 넣지 않도록 SELECT.


CREATE TABLE SAMPLE_SCHEMA.TMP_TABLE 
AS 
SELECT * 
FROM SAMPLE_SCHEMA.HOGE_TABLE PARTITION(P_201902)
WHERE ID != "0003"
;



임시 테이블의 건수 확인


SELECT COUNT(1) FROM SAMPLE_SCHEMA.TMP_TABLE; 

+-----------+
| COUNT(1)  |
+-----------+
|        4  |
+-----------+

EXCHANGE로 파티션 교환


ALTER TABLE SAMPLE_SCHEMA.HOGE_TABLE EXCHANGE PARTITION P_201902
WITH TABLE SAMPLE_SCHEMA.TMP_TABLE; 



대상 파티션 수를 확인하고 교체되었는지 확인합니다.


SELECT COUNT(1) FROM SAMPLE_SCHEMA.HOGE_TABLE PARTITION(P_201902);

+-----------+
| COUNT(1)  |
+-----------+
|        4  |
+-----------+

좋은 웹페이지 즐겨찾기