定長與變長分離
常用字段和不常用字段分離
合理增加冗餘字段
字段型別優先順序
整型 > 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 能起來約束值的目的,內部用整型來儲存...