mysql儲存引擎的選擇

2021-09-22 19:51:53 字數 1624 閱讀 6467

mysql作為一款免費開源的資料庫,使用熱度一直居高不下。下面分析一下mysql架構及對於mysql儲存引擎的選擇。

客戶端鏈結,這個在很多資料庫上都是相同的邏輯,不做過多的贅述。

是mysql比較有意思的部分。大部分mysql的核心服務功能都在這一層,包括查詢解析,分析,優化,快取以及所有的內建函式,例如日期,時間,數字加等。所有跨儲存引擎的功能都在這一層實現:儲存過程,觸發器,檢視等。

儲存引擎,儲存引擎主要負責mysql中資料的儲存和提取。mysql伺服器通過api的方式與儲存引擎進行通訊,這種api的方式巧妙的解決了不同引擎直接的差異,使得差異對上層伺服器透明。mysql才有插拔式儲存引擎,可以自己選擇適合的儲存引擎,不同的表可以使用不同的儲存引擎,不同的儲存引擎之間不會相互通訊,只是相應上層的呼叫請求。

是mysql預設的事務型引擎,也是最重要、使用最廣泛的儲存引擎。innodb的效能和自動崩潰恢復的特性是他備受青睞的主要原因。效能是基於他採用的聚簇索引。並且支援行級鎖,提高了併發效能。

在mysql5.1及之前的版本是是預設的儲存引擎。提供了大量的特性,包含全文索引,壓縮,空間函式等,但是不支援事物和行級鎖(採用表級鎖)。還有乙個致命的缺陷就是崩潰後無法安全恢復(採用資料先儲存在系統記憶體,定期重新整理到磁碟,宕機是未刷入磁碟的資料將丟失)

將資料儲存到記憶體中,讀寫效率都非常高,但是由於不能持久化的原因非特定場景一般不適用。

快取所有的寫並利用zlib對插入行進行壓縮,所以比myisam表的磁碟i/o更少。但是每次select查詢都需要執行全面掃瞄。

所以archive適合日誌和資料採集

選擇引擎的原則是:除非需要用到innodb不具備的特性,並且沒有其他辦法可以替代,否則應該優先選擇innodb引擎。

例如需要用到全文索引,建議優先考慮innodb+sphinx的組合,而不是適用支援全文索引的myisam。當然如果不在乎擴充套件能力和併發能力並且可以接受崩潰後的資料丟失,卻對innodb的空間占用比較敏感(innodb由於對事務的優化多加了2列記錄建立時間,刪除時間),這種場合可以選擇myisam。

如果只是為了記錄日誌,只對插入速度要求比較高,資料庫不能成為瓶頸,那麼myisam和archive儲存引擎比較合適,他們都是開支小,而且插入速度極快。如果需要分析日誌,考慮到執行sql會明顯降低插入效能,可以考慮用主備庫,主庫寫,從庫讀。

唯讀或者大部分情況下唯讀

建議採用innodb。而myisam在一開始可能沒任何問題,但是隨著壓力的上公升,可能會因為各種鎖爭用迅速惡化,崩潰後資料丟失等問題隨之而來。

如果涉及訂單,肯定是要支援事務的。還有就是對外鍵的支援(訂單表和使用者表的關聯等),innodb是訂單類應用的最佳選擇。

3-5t/每台機器  的資料量可以採用innodb。如果資料達到10tb以上的級別,就需要建立資料倉儲了,infobrigth是mysql資料倉儲最成功的方案。當然也有些大資料不適合infobright,卻可能適合tokudb。

mysql支援單個表設定單個的儲存引擎,但是不建議乙個mysql服務用多個儲存引擎,可能出現意想不到的問題。

將乙個表從乙個引擎改為另外乙個引擎最簡單的方法就是alter table語句,如:alert tablemytable engine=innodb;

mysql儲存引擎選擇

常用的儲存引擎為myisam和innodb,其它引擎有ndb cluster merge memory等等。myisam是mysql的預設搜尋引擎,其中的每乙個表都被存放為三個檔案 frm表結構資訊 myd資料檔案 myi索引檔案。myisam支援b tree索引 r tree索引和full tex...

MySQL儲存引擎 選擇

mysql有多種儲存引擎 myisam innodb merge memory heap bdb berkeleydb example federated archive csv blackhole。mysql支援數個儲存引擎作為對不同表的型別的處理器。mysql儲存引擎包括處理事務安全表的引擎和處...

MySql儲存引擎選擇

1.儲存引擎簡介 外掛程式式儲存引擎是 mysql 資料庫最重要的特性之一,使用者可以根據應用的需要選擇如何儲存和索引資料 是否使用事務等。mysql 預設支援多種儲存引擎,以適用於不同領域的資料庫應用需要,使用者可以通過選擇使用不同的儲存引擎提高應用的效率,提供靈活的儲存,使用者甚至可以按照自己的...