假设我有一个列name varchar(20)
的表,我存储了一行name =“abcdef”。这不会使varchar2效率低下?
INSERT INTO tab(id, name) values(12, 'abcdef');
如何为name
内存分配在这种情况下怎么办?
有两种方法我能想到的:
一)
20字节分配,但只用6。就内存分配而言,在这种情况下,varchar2
与char
相比没有任何显着优势。
B)
只有6个字节被分配。如果是这样的话,我addded一对夫妇更行这一个之后,
INSERT INTO tab(id, name) values(13, 'yyyy');
INSERT INTO tab(id, name) values(14, 'zzzz');
,然后我做了更新,
UPDATE tab SET name = 'abcdefghijkl' WHERE id = 12;
哪里的DBMS获取所需的额外6个字节从?可能存在下一个6字节不空闲的情况(如果最初仅分配了6个字节,则可能已经为其他字节分配了下一个字节)。
除了将排移到新位置之外,还有别的方法吗?即使移位也会成为索引组织表格的问题(对于堆组织的表格来说可能没问题)。
这是依赖于实现的,但很可能当您更新时,新行将写入与旧行完全不同的位置。即使没有varchar也是如此。 – hobbs 2010-08-11 09:26:48