mySql 引擎詳解


什么是mySql引擎,有啥用

mySql存儲數據時,有不同的存儲方式,這些方式都使用了不同的底層實現(如:存儲機制,索引技巧,索引技巧,鎖定水平),底層實現的差異帶來的功能也就不同。在不同的場景下使用合適的存儲方式就能讓你的數據讀寫速度更快或者獲得額外的功能。

mySql主要有什么存儲引擎

主要的有:  MyIsam ,   Mrg_Myisam,   Memory,   Blackhole,   CSV,   Performance_Schema,   Archive,   Federated ,  InnoDB

 

可用通過 show engines 查看你的mySql的存儲引擎

 

MyIsam

MyIsam 存儲引擎獨立於操作系統,簡單說就是可用在windows上使用,也可用將數據轉移到Lunex操作系統上。系統兼容性很好!!!。這種存儲引擎在建表的時候,它會創建3個文件。分別是(.frm.MYD.MYI),簡單說明一下:.frm 存儲表的定義(也就是表結構啦),.MYD 就是表里面的數據,.MYD存儲索引。這樣的划分操作系統對大文件的操作是比較慢的,這樣將表分為三個文件,那么.MYD這個文件單獨來存放數據自然可以優化數據庫的查詢等操作。 

特點:

1、不支持事務

2、不支持外鍵

3、查詢速度很快。如果數據庫insert和update的操作比較多的話采用表鎖效率低(建議使用innodb)。

4、對表進行加鎖

注:數據庫鎖參考:https://zhidao.baidu.com/question/158112371.html

 

 

支持3種不同的存儲方式,分別是:靜態表、動態表、壓縮表

靜態表:靜態表的字段都是非變常類型的。優點是非常迅速,容易緩存,出現故障容易恢復;缺點是占用空間通常比動態表多(因為存儲是會按照寬度定義補足空格)

注意:在取數據時,會將數據后面的空格都去掉,如果數據后面本身有空格,那么也會被去掉

動態表:記錄不是固定長度的,這樣的優點時空間占用少;缺點:頻繁的跟新,刪除表易造成碎片,需要定期執行OPTIMIZE TABLE或者myisamchk-r命令來改善性能

壓縮表:因為每個記錄都是單獨壓縮的,所以只有非常小的訪問開支

 

Mrg_Myisam

 

Mrg_Myisam 存儲引擎,其實就是MyIsam的組合,它是將多個使用MyLseam引擎的表聚會,但是它內部沒有數據,真正的數據依然是Mylsam引擎表中,但是可用進行刪除更新等操作。

使用Mrg_Myisam的場景:同一種數據會根據數據的實踐分為多個表,以達到提升效率的作用,這也就是我們常說的分庫分表。如果這時要進行查詢操作,會非常麻煩,因為你也不知道數據放在那個表里。Mrg_Myisam正式解決這種問題的存儲引擎。Mrg_Myisam可以將多個表聚合成一個表統一查詢,然后在刪除Mrg_Myisam統一的表,原有數據不受影響。

 

Memory

Memory 采用的方案式使用內存當存儲介質,優點式響應速度快。但存儲到內存上也導致了一個致命的問題就是當mySql進程崩潰的時數據會丟失。此外Memory對存儲的數據有一定的要求,要求存儲的是長度不變的數據。

Memory索引支持

散列索引:散列索引的使用場景是數據查找時使用 == 匹配,但范圍查詢(<=, >=, <, >)較慢

B樹索引:B樹索引可以使用部分查詢和通配查詢,范圍查詢較快

Memory使用場景:

1、數據量小、訪問非常頻繁、在內存中存放數據,數據量過大會導致內存溢出。可以通過參數max_heap_table_size控制Memory表的大小,限制Memory表的最大的大小。

2、數據是臨時數據,而且立即可用到。那么就比較合適存放在內存中。

3、存儲在表中的數據如果丟失也沒太大關系,不會造成損失。

 

 

Blackhole

江湖人稱 “黑洞搜索引擎”。感興趣的小伙伴可以參考其他的博客。

 

CSV

 

文件結構

.frm表結構描述

.csv數據

.csm表狀態、當前記錄數量等

特點

1、沒有索引、不能為NULL、不能自增

2、更新和刪除時先寫入到臨時文件,然后在rnd_end()函數中重新生成數據文件

3、可以對數據文件直接編輯(保存文本文件內容)

4、以CSV格式進行數據存儲(逗號隔開,引號)

5、數據以文本方式存儲在文件中

6、CSV存儲引擎可以將csv文件作為mysql的表進行處理。存儲格式就是普通的csv文件。

 

 

Performace_Schema

MySql 5.5新出的一個存儲引擎,主要是用來收集數據庫服務器的性能參數。但是我們無法創建該類型的表,它都是有MySql系統自己創建的。

主要提供如下功能:

1、提供進程的詳細信息包含了 鎖、互斥變量、文件信息

2、保持歷史的事件匯總信息,為MySql服務器的性能做出詳細的判斷。

3、對於新增和刪除監控時間點都非常容易,並可以隨意的改變Mysql服務器的監控周期

這個需要在配置文件my.cnf中進行配置才能生效。

 

Archive 

archive是歸檔的意思,僅僅支持插入和查詢兩種功能,在MySQL5.5以后支持索引功能,他擁有很好的壓縮機制,使用zlib壓縮庫,在記錄請求的時候實時的進行壓縮,經常被用來作為倉庫使用。適合存儲大量的獨立的作為歷史記錄的數據。擁有很高的插入速度但是對查詢的支持較差

 

Federated

特點:

1、專門針對遠程數據庫的實現一般情況下在本地數據庫中建表會在數據庫目錄中生成相應的表定義文件,並同時生成相應的數據文件。 
但通過FEDERATED引擎創建的表只是在本地有表定義文件,數據文件則存在於遠程數據庫中通過這個引擎可以實現類似Oracle 下DBLINK的遠程數據訪問功能

2、本地的表結構必須與遠程的完全一樣。 

3、遠程數據庫目前僅限MySQL 

4、不支持事務 

5、不支持表結構修改 

 

InnoDB

InnoDB是一個事務型的存儲引擎,有行級鎖定和外鍵約束,提供了具有提交,回滾和崩潰恢復的事務安全,但是對比MyLSAM引擎,寫的效率會比差一些,並且會占用更多的磁盤空間以保持數據和索引。
 
特點: 
1. 更新多的表,適合處理多重並發的更新請求。
2. 支持事務。
3. 可以從災難中恢復(通過bin-log日志等)。
4. 外鍵約束。只有他支持外鍵。
5. 支持自動增加列屬性auto_increment。
 

 

下面是各引擎的優劣和使

Mylsam:

優點:系統兼容性好,屬於查詢速度賊快的那種。使用表格鎖定的機制,來優化多個並發的讀寫操作。支持索引、字段管理

缺點:不支持事務、外鍵、如果數據庫insert和update的操作比較多的話采用表鎖效率低(建議使用innodb)、不能在表損壞后恢復數據

使用場景:想得到更好的系統兼容性,很高效的查詢速度。但是這個東東不支持事務、外鍵、如果更新表較多的話對效率也會有影響。

 

Memory:

優點:數據訪問快(使用內存做媒介),這是最大的特點

缺點:會占用服務器內存,如果內存非常緊張不推薦使用,而且數據可能會發送丟失,數據只能是臨時數據,數據量不能太大,不然內存會溢出的。

使用場景:數據量小,訪問頻繁,數據丟失影響不大,是臨時數據,而且立即可以使用,內存空間也比較寬松、

 

csv:

優點:數據存儲為CSV文件格式,不用進行轉換,可以對數據文件直接編輯

缺點:不支持索引,不能為空,不能自增

使用場景:適合做為數據交換的中間表(能夠在服務器運行的時候,拷貝和拷出文件,可以將電子表格存儲為CSV文件再拷貝到MySQL數據目錄下,就能夠在數據庫中打開和使用。同樣,如果將數據寫入到CSV文件數據表中,其它web程序也可以迅速讀取到數據。


Performace_Schema

特點:系統內部使用,你也用不到。主要用於收集數據庫服務器性能參數。

 

Federated

優點:針對遠程數據庫實現、本地虛擬表與遠程實體表之間是 TCP 長連接,並且是多個客戶端利用的。所以不用擔心因頻繁建立連接帶來的網絡開銷缺點:遠程數據庫僅限MySql、不支持: 事務、表結構修改、 alter table 命令 

使用場景:針對遠程數據庫實現。

 

InnoDB 

使用場景:如果要提供提交、回滾、崩潰恢復能力的事務安全(ACID兼容)能力,並要求實現並發控制,InnoDB是一個好的選擇

 InnoDB 和 MyISAM之間的區別: 

 

1>.InnoDB支持事物,而MyISAM不支持事物

2>.InnoDB支持行級鎖,而MyISAM支持表級鎖

3>.InnoDB支持MVCC, 而MyISAM不支持

4>.InnoDB支持外鍵,而MyISAM不支持

5>.InnoDB不支持全文索引,而MyISAM支持。

 

Archive

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM