mysql學習

索引原理
想理解索引原理必須清楚一種數據結構,平衡樹(非二叉樹),b tree或者 b+ tree,也有用hash桶做數據結構。
我們平時的表會加上索引,建表的時候如果不指定主鍵,數據庫會拒絕建表語句的執行,加上了主鍵,磁盤上的存儲結構由整齊排列的結構變成了樹狀結構,也就是變成了一個索引。就是所謂的聚集索引
在這裏插入圖片描述
這樣就經過三次查找就能找到了,但是會降低寫,因爲增刪改都會破壞樹結構,重新平衡。
在這裏插入圖片描述

非聚集索引,就是非主鍵的其他字段加索引,索引之間互不關聯
在這裏插入圖片描述

聚集索引和非聚集索引的區別在於,通過聚集索引可以查到需要查找的數據,非聚集索引可以查到記錄對應的主鍵值,再使用主鍵的值通過幾句索引查找到需要的數據。
在這裏插入圖片描述
在這裏插入圖片描述
如果要提供提交、回滾、崩潰恢復能力的事物安全(ACID兼容)能力,並要求實現併發控制,InnoDB是一個好的選擇

如果數據表主要用來插入和查詢記錄,讀操作明顯多於寫操作,存儲量較大,則MyISAM引擎能提供較高的處理效率

如果只是臨時存放數據,數據量不大,並且不需要較高的數據安全性,可以選擇將數據保存在內存中的Memory引擎,MySQL中使用該引擎作爲臨時表,存放查詢的中間結果

如果只有INSERT和SELECT操作,可以選擇Archive,Archive支持高併發的插入操作,但是本身不是事務安全的。Archive非常適合存儲歸檔數據,如記錄日誌信息可以使用Archive

MVCC機制支持併發:讀不加鎖,讀寫不衝突。

InnoDB的MVCC,是通過在每行記錄後面保存兩個隱藏的列來實現的,這兩個列,分別保存了這個行的創建時間,一個保存的是行的刪除時間。這裏存儲的並不是實際的時間值,而是系統版本號(可以理解爲事務的ID),沒開始一個新的事務,系統版本號就會自動遞增,事務開始時刻的系統版本號會作爲事務的ID
具體實現MVCC實現