Zeilenbewegung ist hauptsächlich applied to partition tables. Dadurch können Zeilen über Partitionen verschoben werden. Mit Reihen Bewegung deaktiviert, was der Standard ist, können Sie keine Zeile mit einem Update verschieben:
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
Wenn Sie Reihe Bewegung zulassen, können Sie Reihen mit einem Update verschieben:
SQL> ALTER TABLE part_table ENABLE ROW MOVEMENT;
Table altered
SQL> UPDATE part_table SET ID = 2;
1 row updated
Diese Feature wirkt sich in den meisten Fällen nicht auf die Leistung aus: Die Zeilen werden genau auf die gleiche Weise gespeichert und abgefragt, ob das Feature aktiviert ist oder nicht. Wenn die Zeilenbewegung jedoch aktiviert ist, können die Zeilen physisch verschoben werden (ähnlich wie Löschen + Einfügen), z. B. mit ALTER TABLE SHRINK SPACE
. Diese kann sich wiederum auf den Indexclusterfaktor auswirken, der sich auf die Leistung einiger Abfragen auswirken kann.
Die Zeilenbewegung ist standardmäßig deaktiviert, da dies bedeutet, dass sich die rowid
einer Zeile ändern kann, was nicht das übliche Verhalten in Oracle ist.
Die Aktivierung der Zeilenbewegung erleichtert auch das Ausführen alter alter shrink space, wodurch in einigen Fällen die Größe einer Tabelle ohne Neuaufbau reduziert werden kann. –
Vielen Dank !! Selbst wenn wir es aktivieren, werden Abfragen immer noch die gleiche Zeit dauern. Ich habe einige Leistungsverbesserungen erwartet. –
Zeilenbewegung kann sich auf die Leistung auswirken. Indexabfragen benötigen möglicherweise viele zusätzliche E/A-Vorgänge. Sie können das hier auch lesen: http://www.dba-oracle.com/t_enable_row_movement.htm –