1、存儲引擎前端
Mysql中的數據用各類不一樣的技術存儲在文件(或者內存)中。這些技術中每一種技術都使用了不一樣的存儲機制,索引技巧、鎖定水平而且最終提供普遍的不一樣功能和能力。經過選擇不一樣的技術,你可以得到額外的速度或功能,從而改善你的應用的總體功能。算法
2、分類sql
1.MYISAM存儲引擎:數據庫
不支持事務,也不支持外鍵,優點是訪問速度快,對事務完整性沒有要求或者以SELECT,INSERT爲主的應用基本能夠用這個引擎建立表。緩存
(1)數據存儲形式多線程
MyISAM採用的是索引與數據分離的形式,將數據保存在三個文件中.frm.MYD,.MYIs。併發
.frm存儲表結構異步
.MYD存儲表的數據函數
.MYI存儲表索引高併發
(2)鎖的粒度
MYISAM只支持表鎖不支持行鎖,因此讀取時對錶加上共享鎖,在寫入是對錶加上排他鎖。因爲是對整張表加鎖,相比INNODB,在併發寫入時效率很低。
(3)數據的存儲的特色
MYISAM是基於非聚簇索引進行存儲的。
(4)表的存儲格式
表的存儲格式分紅三種表 靜態表,動態表,壓縮表。
靜態表:表中的字段都是非變長字段。這樣每一個記錄都是固定長度的,優勢存儲很是迅速,容易緩存,出現故障容易恢復;缺點是佔用的空間一般比動態表多(由於存儲時會按照死的寬大度定義補足空格)ps:在取數據的時候,默認會把字段後面的空格去掉,若是不注意會把數據自己帶的空格也會忽略。
動態表:
記錄不是固定長度的,這樣存儲的優勢是佔用的空間相對較少;缺點:頻繁的更新、刪除數據容易產生碎片,須要按期執行OPTIMIZE TABLE或者myisamchk-r命令來改善性能。
壓縮表:由於每一個記錄是被單獨壓縮的,因此只有很是小的訪問開支
(5)其餘
MyISAM提供了大量的特性,包括全文索引,壓縮,空間函數,延遲更新索引鍵等。
進行壓縮後的表是不能進行修改的,可是壓縮表能夠極大減小磁盤佔用空間,所以也能夠減小磁盤IO,從而提供查詢性能。
全文索引,是一種基於分詞建立的索引,能夠支持複雜的查詢。
延遲更新索引鍵,不會將更新的索引數據當即寫入到磁盤,而是會寫到內存中的緩衝區中,只有在清除緩衝區時候纔會將對應的索引寫入磁盤,這種方式大大提高了寫入性能。
2.INNODB存儲引擎
INNODB存儲是MYSQL默認事務引擎,也是目前重要、使用最普遍的存儲引擎。
概述:
支持事務,行鎖設計,支持MVCC(多版本併發控制)來支持高併發,支持外鍵,提供一致性非鎖定讀設計。
優勢:
DML操做遵循ACID模型(原子性、一致性、隔離性和持久性),支持事務,支持CRASH-RECOVERY特性(當MYSQL發生故障重啓後,對於INNODB表,沒有完成的事務將經過REDO日誌從新進行,已經提交可是沒有寫到數據文件中的數據,將從doublewrite buffer中從新構建)以保護數據。
二、InnoDB buffer pool 緩存被訪問的表和索引信息,常用的數據直接從內存中讀取。
三、inserts,update,deletes操做被一種稱爲change buffering的機制所優化。InnoDB不只容許多併發讀寫同一張表,它還會緩存發生改變的數據,優化磁盤I/O。
四、當數據庫運行大表的長時間查詢且反覆訪問相同表的相同行時,一種叫作Adaptive Hash Index的特性使這些查詢更快,就像數據從哈希表中查詢出來同樣。
五、能夠壓縮表和相關的索引。
六、能夠對性能和可用性形成很小影響地建立和刪除索引。
七、能夠很快TRUNCATE掉一個file_per_table表空間,釋放出磁盤空間供操做系統使用,而沒必要釋放出僅能供InnoDB所重用的系統表空間。
八、支持行級鎖和一致性讀,提升多用戶的併發性和性能。
九、支持主鍵,提升查詢性能。
十、爲了保持數據的完整性,InnoDB也支持外鍵。
十一、你能夠將InnoDB表與MySQL其餘存儲引擎的表自由組合在一塊兒使用。例如,在一個SQL中,你能夠關聯一張InnoDB表和一個內存表。
十二、在處理大量數據的時候,InnoDB引擎能夠有效的發揮CPU效率和提高性能。.
INNODB體系結構