The storage location of a varchar2 column in a row should be a continuous area instead of multiple areas linked by pointers. It's true that the space taken by varchar2 data will be released when it's updated with different size data (different including smaller! Surprise!!). The updated row will jump to the free space area in the same block. The best way to prove this is do a block dump: create table t (s varchar2(10)); insert into t values ('abcde'); insert into t values ('12345'); select file_id, block_id from dba_extents where segment_name = 'T'; --suppose you get 3 and 123 from above alter system dump datafile 3 block 124; --Look at the trace file in udump directory for offs for pri[0] (row 1) and pri[1] (row 2), --which are row addresses, also fsbo (free space beginning) and fseo (free space end). update t set s = 'abcd' where s = 'abcde'; alter system dump datafile 3 block 124; --Check the dump file again. Oracle should coalesce the holes in the data area at appropriate times (I don't know when; maybe only when avsp is not large enough for a row length increase but pctfree still allows insert into this block). If you see avsp (readily available free space) and tosp (total free space) different, you have holes. Note that even if a row moves to a different location in the block, it should be much more efficient than row chaining or row migration, which goes across 2 or more blocks. This is because re-arranging inside the same block is a memory operation and does not involve multiple block read from disk (or buffer cache). So I assume this row re-arrangement takes a little CPU but generally does not degrade your database performance. As I said before, if you consider char instead of varchar2, you still have to make sure that other columns on the same row cooperate to avoid row re-arrangement. If you change a number from 100 to 123 on that row, all your effort on using char is wasted. [Some names in the block dump trace are explained in Bug:1265735.] Yong Huang [QUOTE] varchar2存储位置应该是不固定的,而是由一些不连续的存储空间通过指针连接起来的,当VARCHAR2中存储内容发生变化事,肯定有些存储空间被释放,时间长了,这些存储空间就会影响存取速度。 [/QUOTE]