如 id int, 佔
4個位元組
, char(4) 佔4
個字元長度
,也是定長
, time
即每一單元值佔的位元組是固定的.
核心且常用字段,宜建成定長
,放在一張表
.而varchar, text,blob,這種變長字段
,適合單放一張表
, 用主鍵與核心表關聯起來
.需要結合**具體的業務來分析,分析欄位的查詢場景
,查詢頻度低的字段
,單拆出來
.典型的」空間換時間」
列的特點分析:
整型: 定長
,沒有國家
/地區之分
,沒有字符集的差異
time定長
,運算快
,節省空間
. 考慮時區,寫
sql時不方便
where > 『2005-10-12』;
enum: 能起來約束值的目的
, 內部用整型來儲存,但與
char
聯查時,
內部要經歷串與值的轉化
char 定長
, 考慮字符集和(排序
)校對集
varchar, 不定長 要考慮字符集的轉換與排序時的校對集
,速度慢
.text/blob 無法使用記憶體臨時表
原因: 大的字段浪費記憶體
,影響速度
,以年齡為例 tinyint unsigned not null ,可以儲存
255歲,足夠
. 用int浪費了
3個位元組
以varchar(10) ,varchar(300)儲存的內容相同
, 但在表聯查時
,varchar(300)
要花更多記憶體
原因: null不利於索引
,要用特殊的位元組來標註
.在磁碟上佔據的空間其實更大.
1: enum列在內部是用整型來儲存的
2: enum列與
enum
列相關聯速度最快
3: enum列比
(var)char
的弱勢---
在碰到與
char
關聯時,
要轉化.
要花時間
.優勢在於,當
char
非常長時
,enum
依然是整型固定長度
.
當查詢的資料量越大時,enum的優勢越明顯
.
enum與
char/varchar
關聯 ,
因為要轉化
,速度要比
enum->enum,char->char
要慢,
但有時也這樣用-----就是在資料量特別大時
,可以節省
io.
原因----無論
enum(『manmaman』,』womanwomanwoman』) 列舉的字元多長
,內部都是用整型表示
, 在記憶體中產生的資料大小不變,而
char型,
卻在記憶體中產生的資料越來越多
.總結: enum 和
enum
型別關聯速度比較快,enum 型別節省了
io
mysql優化 表的優化與列型別的選擇
定長與變長分離 常用字段和不常用字段分離 合理增加冗餘字段 字段型別優先順序 整型 date,time enum,char varchar blob 列的特點分析 整型 定長,沒有國家 地區之分,沒有字符集的差異 time 定長,運算快,節省空間.考慮時區 enum 能起來約束值的目的,內部用整型來...
表的優化和列型別的選擇
如id int 佔四個位元組 char 4 佔四個字元長度,也是定長 time即每乙個單元值佔的位元組是固定的 核心且常用字段,宜建成定長,放在一張表,而varchar text bolb這種邊長的字段,適合單方一張表,用主鍵與核心表關聯起來。需要結合 具體業務來分析,分析欄位的查詢場景,查詢頻度低...
MySQL優化筆記02 列型別的選擇
字段型別優先順序排序 整型 date,time enum,char varchar blob 列的特點分析 整型 定長,沒有國家 地區之分,沒有字符集的差異 time 定長,運算快,節省空間.考慮時區,寫sql時不方便 where 2005 10 12 enum 能起來約束值的目的,內部用整型來儲存...