存儲引擎:MyISam,Innodb.MyISam不支援事物,不支援行鎖,速度快,不支援外建索引,存儲磁盤有三個檔案,表結構,主鍵,資料。
Innodb:支援事物,支援行鎖,存儲磁盤兩個檔案,表結構,主鍵與資料一個檔案。
存儲的資料類型有兩種:B-Tree與B+Tree.
B-Tree:節點與葉子節點,節點兩端有指針,葉子節點沒有指針。葉節點具有相同的深度。節點存儲資料的個數叫做度。索引與資料是存儲在一個二維數組裡。在删除或插入資料時會破壞B-Tree的性質。
B+Tree:節點隻存索引,這樣在機關度下能更快的讀取到資料。葉節點存儲資料,沒有指針,但是有相鄰資料的箭頭。
一般使用磁盤I/O的次數評價索引結構的優劣,B+Tree一般度都會大于100,是以h一般在3-5之間,目前最流行的是B+Tree結構
Innodb引擎推薦使用主鍵自增原則,這樣才能順序查找,提高了資料查詢的速度,這是根據存儲結構相關的。
資料庫優化的建議:
1.主鍵自增,字段預設值不要為null,null是一種特殊資料需要單獨存儲浪費空間,并且查詢隻能使用is not null 或者使用is null查詢全表掃描,查詢性能不高。
2.對經常查詢的資料加索引,聯合索引要符合最左字首原則使用。
3.避免使用 order by ,group by 這樣的聚合函數,可以在業務方法裡對資料處理。
4.mysql的事物隔離級别(讀已送出,讀未送出,可重複讀,串行化serializable)
5.面試經常問,如果我們有幾億的使用者,我們怎麼進行資料庫設計,水準分表,可以根據使用者id取模進行資料負載均衡以及搭建叢集讀寫分離的方案解決。(擴充性差)
6.對于經常查詢一般不做修改的資料,可做成服務端緩存,修改了更新緩存。
7.對于統計的資料,如果對實時性能要求不高,可以定時查詢放到一個統計表裡。