행 이동은 주로 applied to partition tables입니다. 행을 파티션간에 이동할 수 있습니다. 당신이 행 이동을 허용하면
SQL> CREATE TABLE part_table (ID NUMBER)
2 PARTITION BY RANGE (ID)
3 (PARTITION p0 VALUES LESS THAN (1),
4 PARTITION p1 VALUES LESS THAN (MAXVALUE));
Table created
SQL> INSERT INTO part_table VALUES (0);
1 row inserted
SQL> UPDATE part_table SET ID = 2;
UPDATE part_table SET ID = 2
ORA-14402: updating partition key column would cause a partition change
, 당신은 업데이트 행을 이동할 수 있습니다 :
SQL> ALTER TABLE part_table ENABLE ROW MOVEMENT;
Table altered
SQL> UPDATE part_table SET ID = 2;
1 row updated
이를 행 운동이 비활성화로, 기본이되는, 당신은 업데이트 행을 이동할 수 없습니다 기능은 대부분의 경우 성능에 영향을 미치지 않습니다. 기능이 활성화되어 있는지 여부에 상관없이 행이 정확히 동일한 방식으로 저장되고 쿼리됩니다. 그러나 행 이동이 활성화되면, 행은 실제로 예를 들어 ALTER TABLE SHRINK SPACE
으로 물리적으로 이동 (delete + insert와 유사) 될 수 있습니다. 이 경우은 예를 들어 인덱스 클러스터 요소에 영향을 줄 수 있으며 이는 일부 쿼리의 성능에 영향을 미칠 수 있습니다.
행 이동은 행의 rowid
이 변경 될 수 있음을 의미하기 때문에 기본적으로 사용되지 않습니다. 이는 Oracle에서 일반적인 동작이 아닙니다.
행 이동을 사용하면 alter table shrink space를 쉽게 실행할 수 있으며 경우에 따라 다시 작성하지 않고 테이블 크기를 줄일 수 있습니다. –
고마워요 !! 그래서 우리가 그것을 가능하게하더라도 쿼리는 여전히 같은 시간이 걸릴 것입니다. 나는 약간 성과 개선을 예상하고 있었다. –
행 이동은 성능에 영향을 미칠 수 있습니다. 인덱스 쿼리에는 추가 I/O 작업이 많이 필요할 수 있습니다. 또한 여기에서 읽을 수 있습니다. http://www.dba-oracle.com/t_enable_row_movement.htm –