導讀:本篇文章是想聊聊MySQL為什麼要出現存儲引擎這項技術。
「存儲引擎」從字面理解,「存儲」的意思的存儲數據。
「引擎」一詞來源於發動機,它是發動機中的核心部分。在軟體工程領域,相似的稱呼有「遊戲引擎」、「搜尋引擎」,它們都是相應程序或系統的核心組件。
所以從這裡可以看出「存儲引擎」似乎也是資料庫的核心。
下圖是市場上流行的資料庫管理系統。
存儲引擎是MySQL有別於其他資料庫管理系統的最大特色,比如它的兄弟Oracle中就沒有專門的存儲引擎的概念,僅僅有OLTP和OLAP模式的區分,兩者的差別不大,只有參數設置上的不同。
Oracle無論哪種模式都是支持事務概念的,Oracle是一個不允許讀髒的資料庫系統。
回到MySQL身上,存儲引擎不僅是MySQL的特色,也是作為MySQL核心的存在,那麼它的作用到底是什麼呢?
我們知道關係型資料庫的數據是存在表裡的,可以將表理解為由行和列組成的表格,類似於Excel的電子表格的形式,每個表格就是一個數據。
表是在存儲數據的同時,還要組織數據的存儲結構,而這些數據的組織結構就是由存儲引擎決定的。
即存儲引擎的作用就是規定了數據存儲時的存儲結構。
現實生活中,由於不同業務產生了不同的數據,這些數據有的可能偏重於被頻繁查詢,有的要求增刪速度快,有的則對事務、索引、外鍵有特殊規定。
這樣一來,就對存儲數據的表要求使用不同的數據組織結構,也就是存儲引擎。
簡而言之,就是業務直接決定了存儲引擎。
從這裡就可以看出,同一個資料庫內的多個表,可以使用各自符合業務的存儲引擎,即存儲引擎的使用級別是數據表。
比如MySQL中MyISAM引擎不支持事務的概念,多用於數據倉庫這樣查詢多而事務少的情況,速度較快。
MySQL中InnoDB引擎支持事務的概念,多用於web網站後臺等實時的中小型事務處理後臺。
對我們來說,MySQL提供了很多種類型的存儲引擎,我們可以根據對數據處理的需求,選擇不同存儲引擎,從而提高MySQL的使用性能。
對於MySQL支持的多種存儲引擎,可以通過「SHOW ENGINES」語句來查看。
對於日常工作來說,常用的存儲引擎只有三種:默認的InnoDB、MyISAM和MEMORY。
具體如何選擇不在本文要求之中。
總結:簡單來說,存儲引擎就是數據的存儲結構,由實際業務決定。