oracle資料型別data type與儲存空間大小(二)
SQL> desc t_col_type;
Name Null? Type
----------------------------------------- -------- ----------------------------
A VARCHAR2(30 CHAR) #用的是char而非byte
####插入漢字,測試表儲存大小
declare
v_i int;
begin
for i in 1..100000 loop
insert into t_col_type values('我愛北京天安門***');
commit;
end loop;
end;
/
select segment_name,bytes,bytes/1024/1024 mb from user_segments where segment_name='T_COL_TYPE';
實際佔用的大小(100000條記錄)
3000000
表結構佔用的大小
SQL> select segment_name,bytes,bytes/1024/1024 mb from user_segments where segment_name='T_COL_TYPE';
SEGMENT_NAME
--------------------------------------------------------------------------------
BYTES MB
---------- ----------
T_COL_TYPE
65536 .0625
插入100000記錄的大小
SQL> select segment_name,bytes,bytes/1024/1024 mb from user_segments where segment_name='T_COL_TYPE';
SEGMENT_NAME
--------------------------------------------------------------------------------
BYTES MB
---------- ----------
T_COL_TYPE
5242880 5
5242880 - 65536 = 5242880 與實際10w記錄的佔用大小3000000還有有有近一半的差距
1
VARCHAR2(size [BYTE | CHAR])
Variable-length character string having maximum length size bytes or characters. Maximum size is 4000 bytes or characters, and minimum is 1 byte or 1 character. You must specify size for VARCHAR2.
BYTE indicates that the column will have byte length semantics; CHAR indicates that the column will have character semantics
問題:
按我的理解:10w記錄佔用的大小應是30byte*100000=3000000byte啊,再加上表結構的65536byte,哪其它的大小跑哪兒去了
一個漢字佔2byte還是3個byte喲
###表segment是由20個extent組成,且每個extent大小不一樣
1* select segment_name,extent_id,bytes,blocks from user_extents where segment_name='T_COL_TYPE'
SEGMENT_NAME EXTENT_ID BYTES BLOCKS
--------------------------------------------------------------------------------- ---------- ---------- ----------
T_COL_TYPE 0 65536 8
T_COL_TYPE 1 65536 8
T_COL_TYPE 2 65536 8
T_COL_TYPE 3 65536 8
T_COL_TYPE 4 65536 8
T_COL_TYPE 5 65536 8
T_COL_TYPE 6 65536 8
T_COL_TYPE 7 65536 8
T_COL_TYPE 8 65536 8
T_COL_TYPE 9 65536 8
T_COL_TYPE 10 65536 8
SEGMENT_NAME EXTENT_ID BYTES BLOCKS
--------------------------------------------------------------------------------- ---------- ---------- ----------
T_COL_TYPE 11 65536 8
T_COL_TYPE 12 65536 8
T_COL_TYPE 13 65536 8
T_COL_TYPE 14 65536 8
T_COL_TYPE 15 65536 8
T_COL_TYPE 16 1048576 128
T_COL_TYPE 17 1048576 128
T_COL_TYPE 18 1048576 128
T_COL_TYPE 19 1048576 128
20 rows selected.
SQL>
小結:
一個segment是由多個extent組成,extent是由多個block組成.每個extent大小不一定相同;所以要精確計算每個表table的真正儲存佔用大小,還要去了解block的內部儲存,因為segment最終是由許多個block組成,研究block吧
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-666447/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle資料型別data type與儲存空間大小(一)Oracle資料型別
- oracle資料型別與儲存結構Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(二)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(二)——數字型別Oracle資料型別
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- Oracle 儲存型別Oracle型別
- Oracle基本資料型別儲存格式淺析(五)——RAW型別Oracle資料型別
- 資訊學奧賽一本通 1016:整型資料型別儲存空間大小 | OpenJudge NOI 1.2 01資料型別
- 資訊學奧賽一本通 1018:其他資料型別儲存空間大小 | OpenJudge NOI 1.2 03資料型別
- Oracle基本資料型別儲存格式淺析[zt]Oracle資料型別
- Oracle基本資料型別儲存格式淺析(四)——ROWID型別Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(一)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(三)Oracle資料型別
- Oracle基本資料型別儲存格式淺析(三)——日期型別(四)Oracle資料型別
- oracle 11.2.0.3 rac資料庫線上新增ASM儲存空間Oracle資料庫ASM
- MYSQL 資料型別儲存-數值型MySQL 資料型別
- Oracle 12C 新特性之擴充套件資料型別(extended data type)Oracle套件資料型別
- mysql5.5列資料型別data type_測試MySql資料型別
- 資料庫儲存時間到底該用什麼型別?資料庫型別
- oracle 回收表空間的資料檔案大小Oracle
- redis-4.資料儲存型別Redis型別
- MYSQL-資料型別儲存-DATEMySql資料型別
- 給資料庫新增儲存空間的案例資料庫
- SAP UI5 資料型別(data type) 學習筆記UI資料型別筆記
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- oracle 修改表空間儲存路徑Oracle
- SQL Server 資料儲存與 NTFS 簇的大小SQLServer
- Oracle資料庫表空間的資料檔案大小上限。Oracle資料庫
- Rust的變數型別__Data typeRust變數型別
- Redis(一):基本資料型別與底層儲存結構Redis資料型別
- PHP memcached 各種資料型別儲存PHP資料型別
- PostgreSQL儲存智慧-空間聚集儲存SQL
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- Oracle Lob型別儲存淺析Oracle型別
- 字元型別的字元儲存與位元組儲存字元型別
- SQL Server資料儲存與NTFS簇的大小PXSQLServer
- 【資料庫】資料庫儲存元素型別基礎資料庫型別
- 【原創】Oracle number date varchar2欄位型別佔用空間大小Oracle型別