mysql優化 表的優化與列型別的選擇

2021-08-08 22:20:37 字數 1305 閱讀 7092

定長與變長分離

常用字段和不常用字段分離

合理增加冗餘字段

字段型別優先順序

整型 > date,time > enum,char>varchar > blob

列的特點分析:

整型: 定長,沒有國家/地區之分,沒有字符集的差異

time:定長,運算快,節省空間. 考慮時區;

enum: 能起來約束值的目的, 內部用整型來儲存,但與char聯查時,內部要經歷串與值的轉化

char:定長, 考慮字符集和(排序)校對集

varchar:不定長 要考慮字符集的轉換與排序時的校對集,速度慢.

text/blob:無法使用記憶體臨時表

夠用就行,不要慷慨

原因: 大的字段浪費記憶體,影響速度,

以年齡為例,tinyint unsigned not null ,可以儲存255歲,足夠. 用int浪費了3個位元組。

以varchar(10) ,varchar(300)儲存的內容相同, 但在表聯查時,varchar(300)要花更多記憶體。

enum列的說明

create table t2 (

id int,

gender enum('man','woman'),

key(gender)

)engine innodb charset utf8;

create table t3 (

id int,

gender char(5) not null default '',

key(gender)

)engine innodb charset utf8;

insert into t2 select id,if(id%2,'man','woman') from dict limit 10000;

insert into t3 select id,if(id%2,'man','woman') from dict limit 10000;

mysql> select gender+1 from t2 where id = 1;

+----------+

| gender+1 |

+----------+

| 2 |

+----------+

1 row in set

mysql>

表的優化與列型別選擇

如 id int,佔 4個位元組 char 4 佔4 個字元長度 也是定長 time 即每一單元值佔的位元組是固定的.核心且常用字段,宜建成定長 放在一張表 而varchar,text,blob,這種變長字段 適合單放一張表 用主鍵與核心表關聯起來 需要結合 具體的業務來分析,分析欄位的查詢場景 查...

表的優化和列型別的選擇

如id int 佔四個位元組 char 4 佔四個字元長度,也是定長 time即每乙個單元值佔的位元組是固定的 核心且常用字段,宜建成定長,放在一張表,而varchar text bolb這種邊長的字段,適合單方一張表,用主鍵與核心表關聯起來。需要結合 具體業務來分析,分析欄位的查詢場景,查詢頻度低...

MySQL優化筆記02 列型別的選擇

字段型別優先順序排序 整型 date,time enum,char varchar blob 列的特點分析 整型 定長,沒有國家 地區之分,沒有字符集的差異 time 定長,運算快,節省空間.考慮時區,寫sql時不方便 where 2005 10 12 enum 能起來約束值的目的,內部用整型來儲存...