mysql優化和索引
表的優化
1.定長與變長分離
如 int,char(4),time核心且常用字段,建成定長,放在一張表;
而varchar,text,blob這種變長字段適合單放一張表,用主鍵與核心表關聯。
2.常用字段和不常用字段要分離
3.在 1 對多需要關聯統計的字段上,添加冗余字段。
列類型選擇原則
1.字段類型優先級 整型 > date,time > enum,char > varchar > blob,text
2.夠用就行,不要慷慨,大的字段浪費內存,影響速度。
3.盡量避免用NULL,NULL不利於索引,需要特殊的字節來標註。
Enum列的說明
1.enum列在內部是用整型來存儲的
2.enum列和enum列想關聯速度最快
3.enum列比(var)char的弱勢--在碰到與char關聯時,要轉化,要花時間
4.優勢---當char非常長時,enum依然是整型固定長度,當查詢的數據量越大時。enum的優勢越明顯。
索引提高查詢的速度、提高排序的速度、提高分組的速度
聚簇索引和非聚簇索引
聚簇索引:btree
innodb引擎,索引和數據是在一塊的,
innodb直接在主鍵索引的樹中,儲存行的數據,(既存儲了主鍵值,又存儲了行數據)。
innodb次索引指向對主鍵的引用。
優點:根據主鍵查詢條目比較少時,不用回行(數據就在主鍵節點下)。
缺點:如果碰到不規則數據插入時,造成頻繁的頁分裂。
非聚簇索引:btree
myisam引擎, 索引和數據是分開的,
myisam索引指向行在磁盤上的位置
myisam中,主索引和次索引都指向物理行(磁盤位置)。
mysql優化和索引