1.分為server層和儲存引擎層
server層又劃分為聯結器,解析器,優化器,執行器,儲存引擎層則是innodb或者myisam等不同的儲存引擎。
聯結器管理連線,臨時記憶體也是分配在連線物件上
解析器 對sql進行詞法解析 語法解析 ,驗證sql的語法正確性
優化器 確定使用哪個索引 連線的方式 等
執行器 調儲存引擎的介面取資料,同時對資料進行處理 比如說order by group join 等
2.常用的儲存引擎 innodb和myisam
區別 innodb支援事務,支援行級鎖, myisam不支援
innodb支援online ddl ,myisam不支援
innodb執行ddl有repalce和copy兩種模式,myisam只有copy模式
只看效能,myisam較高,但是看功能 innodb強大
3.mysql索引實現機制是b+樹,分為聚簇索引和二級索引,二級索引就是普通索引,儲存的是索引key和聚簇索引的key 。 也就是普通索引的查詢,需要去聚簇索引上回表再查一次。
為什麼使用b+樹,如果使用有序陣列,查詢快(二分法),但是插入不行,要挪動後面的資料。
如果使用hash, 範圍查詢效能不行,只能挨個遍歷了。
二叉樹,查詢快,也支援範圍,插入也快,但是節點過少 樹太高,查詢的時候需要多遍歷資料塊,io次數就多。
b+樹 結合以上的優點,實現了查詢快,二分法,插入快 logn ,樹高低 為3層 ,io次數少。
b+樹在子節點滿的時候,需要**,建立新的節點,然後把一半子節點掛過去,導致空間利用率變低。
除了b+樹,還有一種b樹,b樹在兄弟結點上也有指標,在節點滿的時候,把多餘的節點掛到兄弟結點上,避免了建立新節點,比b+樹空間利用率更高 頁**次數少。
4.事務的原理。
undolog+mvcc+行級鎖
事務有四個隔離級別
1.讀未提交,直接當前讀即可,不需要特殊處理。
2.讀提交 ,可重複讀 利用mvvc (併發版本控制)實現,每個事務在啟動的時候,申請乙個事務id
當事務更改資料之後,資料記錄會維護這個事務id,代表乙個版本,資料會有多個版本。
讀提交,每個語句都開啟一次一致性檢視。
可重複讀,事務啟動的時候開啟一次一致性檢視。
在一致性檢視開啟的時候,會存下來當前正在執行的事務的id,儲存到乙個陣列中。
當讀到的資料記錄,其事務id如果在這個陣列中,表示其是還沒提交的事務,就通過undolog去計算它的上乙個版本,得到上乙個版本的資料,依次類推。
undolog是回滾日誌,當資料記錄被修改的時候就會記錄undolog,是一種邏輯日誌,記錄的是回滾語句。
如果事務回滾,那麼就執行undolog對資料進行回滾。
undolog只有在沒有比這個undolog更早的一致性檢視的時候才會刪除,也就是當最早的事務都提交之後,undolog就刪除了。
4.序列化,通過行級鎖實現,對涉及到的資料都加上鎖。
5.mysql常用的優化策略
1.加索引
利用索引覆蓋,索引下推,減少回表
利用索引自身的順序,避免排序
2.事務
避免大事務
開啟死鎖檢測
事務超時監控
3.慢sql優化
4.長字串的列,可以儲存hash或者字首索引 來減少空間使用。
5.資料刷盤的引數調整,根據機器的磁碟效能調整。
130308 階段總結
開學兩周了,一切漸漸重回正軌,電氣專業的四大天書之二的模電和電機也漸漸聽不懂了 放假前的目標只能說是初步達到,對基本的貪心和動態規劃有了了解。最近又雜七雜八的學了些知識,回顧了一些學過的演算法,記錄如下 求次小生成樹的兩種解法 1 用求最小生成樹的方法,求出最小生成樹,並記錄下該最小生成樹上的所有邊...
130106 階段總結
2013年的第一篇博文。為期一周的期末考修羅場終於結束了,終於活著回到acm的戰場了,目測沒有掛科的風險 接下來又是兩周的金工實習,這不科學!回顧前幾周的學習進度 計算幾何部分還有 pick定理 三角剖分 三維凸包 座標變換 沒看。poj貌似還有不少計算幾何的神題,目前水平不足,留待以後學習。準備利...
ARM系統設計筆記5 階段總結
2006 3 28 arm系統設計進行了1個月,今天向老大做了階段報告和計畫。做這個方案算是飛快了,而且過程也算順利。期間 器出了點問題,換了乙個,並在板上加大電容就好了。另外,現在板子不算太穩定,萬用表和示波器一連上去很容易導致cpu復位,可能是像dong說的一樣,cpu的旁路電容加的不夠。今天老...