1.架構內容
myisam,innodb常用的兩種資料引擎,
設計架構:連線層,服務層,引擎層,資料層
資料庫引擎對比:
物件專案
myisam
innodb
主外來鍵不支援
支援事物
表鎖,即使操作一條記錄也會鎖住整個表,不適合高併發的操作
行鎖,操作室只鎖住一行,不對其他行有影響,適合高併發的操作
快取只快取引擎,不快取真實資料
不僅快取索引還快取真實資料,對記憶體要求較高,而且記憶體大小對效能決定性的影響
表空間小
小關注點
效能事物
2.優化分析:
分析角度:效能下降sql慢,執行時間長,等待時間長(查詢語句寫得爛,索引失效,關聯查詢太多join,伺服器調優及引數設定(緩衝,執行緒數等))
常用的join查詢,索引簡介,效能分析,效能優化
索引:排好序的快速查詢資料結構
除資料外,資料庫系統還維護著滿足特定查詢演算法的資料結構
平常所說的索引,如果沒有特別指明,都是指b樹(多路搜尋樹,不一定為二叉樹)結構組織的序列。其中聚集索引,次要索引,復合索引,字首索引,唯一索引預設都是b+樹,統稱索引。當然b+樹這種型別的索引之外,還有雜湊索引(hash-index)等
mysql索引分類:單值索引,唯一索引,復合索引,
單值索引:即乙個索引包含單個列,乙個表有多個單列索引
唯一索引:索引列的值必須唯一,但允許有空值
復合索引: 即乙個索引包含多個列
mysql索引結構:btree索引,hash索引,full-text索引,r-tree索引
3.那些情況下需要建立索引:
3.1自動主鍵建立唯一索引
3.2頻繁作為查詢條件的字段應該建立索引
3.3查詢中與其他表關聯的字段,外來鍵關係建立索引
3.4頻繁更新的字段不適合建立索引,因為每次更新不單單是更新了記錄還會更新索引
3.5where條件裡用不到的字段不建立索引
3.6單鍵/組合索引的選擇問題,who?(高併發下傾向建立組合索引)
3.7查詢中排序的字段,排序欄位若通過索引去訪問將大大提高排序速度
3.8查詢中統計或者分組字段
4.那些情況下不建議建立索引
4.1表記錄太少
4.2經常增刪改的表
4.3資料列重複內容太多,建立索引沒有意義
5.mysql常見瓶頸
5.1cpu飽和一般發生在資料裝入記憶體或者從磁碟讀取資料的時候
5.2io瓶頸發汗個在裝入資料遠大於記憶體容量的時候
5.3伺服器硬體的效能瓶頸,top,free,iostat,vmstat來檢視系統的效能狀態
6.type顯示的是訪問型別,是較為重要的乙個指標,結果值從最好到最壞依次是
system>const>eq_ref>ref>range>index>all
保證查詢至少達到range級別,最好能達到ref
查詢中若使用了覆蓋索引,則該索引僅出現在key列表中
未完待續.....
mysql優化學習筆記
定位執行效率低的sql語句 通過explain分析效率低的sql 通過show profile分析sql 通過trace分析優化器如何選擇執行計畫 確定問題,採取措施優化 匹配全值,條件所有列都在索引中而且是等值匹配 匹配值的範圍查詢,字段必須在索引中 匹配最左字首,復合索引只會根據最左列進行查詢 ...
MySQL優化 學習筆記(2)
資料庫設計 3nf 1.第一正規化 列欄位資訊不可再分割,關係型資料庫自然滿足。2.第二正規化 滿足第一正規化,完全依賴主鍵,既是無重複行資料,通常設定主鍵實現。3.第三正規化 滿足第二正規化,要求乙個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊,減少冗餘。注意 有時候需要反第三正規化,有必要...
mysql效能優化學習筆記
數量比頻率更好 64位使用32位的伺服器版本 32位不能使用超過4g的內容,因此選擇的時候需要注意。myisam innodb cpu 64位的cpu執行64位的系統 高併發的場景,cpu數量比頻率重要 cpu密集型的場景和複雜sql則頻率越高越好 記憶體 i o 選擇伺服器版本,而不是桌面版本。核...