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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資訊學奧賽一本通 1016:整型資料型別儲存空間大小 | OpenJudge NOI 1.2 01資料型別
- 資訊學奧賽一本通 1018:其他資料型別儲存空間大小 | OpenJudge NOI 1.2 03資料型別
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- [20191219]oracle timestamp資料型別的儲存.txtOracle資料型別
- [20241009]oracle timestamp with time zone資料型別的儲存.txtOracle資料型別
- 資料庫儲存時間到底該用什麼型別?資料庫型別
- SAP UI5 資料型別(data type) 學習筆記UI資料型別筆記
- redis-4.資料儲存型別Redis型別
- Rust的變數型別__Data typeRust變數型別
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- Redis(一):基本資料型別與底層儲存結構Redis資料型別
- SQL Server資料儲存與NTFS簇的大小PXSQLServer
- 雲空間服務,助力使用者資料儲存與協同
- 清理oracle資料庫空間Oracle資料庫
- 【PDB】Oracle資料庫如何檢查和設定pdb最大儲存大小Oracle資料庫
- 二、變數與資料型別變數資料型別
- Oracle 資料型別Oracle資料型別
- Mybatis讀取和儲存json型別的資料MyBatisJSON型別
- 如何獲取 PostgreSQL 資料庫中的表大小、資料庫大小、索引大小、模式大小、表空間大小、列大小SQL資料庫索引模式
- [20190930]oracle number型別儲存轉化指令碼.txtOracle型別指令碼
- [20191003]oracle number型別儲存轉化指令碼.txtOracle型別指令碼
- [20191013]oracle number型別儲存轉化指令碼.txtOracle型別指令碼
- mssql sqlserver 可以儲存二進位制資料的欄位型別詳解SQLServer型別
- 資料型別與函式索引-Oracle篇資料型別函式索引Oracle
- 資料庫恢復中需要大量儲存空間的原因HQ資料庫
- 3-04. 實現箱子儲物空間的儲存和資料交換
- 2、儲存容量和儲存地址空間的轉換
- innodb表空間儲存結構
- 【轉】ORACLE資料型別Oracle資料型別
- Oracle anydata資料型別Oracle資料型別
- ORACLE NUMBER資料型別Oracle資料型別
- Oracle資料型別對應Java型別Oracle資料型別Java
- 儲存與索引------《Designing Data-Intensiv索引
- 達夢資料庫表空間等空間大小查詢方法總結資料庫
- InnoDB儲存引擎鎖機制(二、 鎖的型別)儲存引擎型別
- [20221012]簡單探究nvarchar2資料型別儲存.txt資料型別
- Redis常用資料型別及其儲存結構(原始碼篇)Redis資料型別原始碼
- Linux中各資料夾所佔空間大小技巧Linux
- Oracle OCP(19):資料型別Oracle資料型別