假設我有一個列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