mysql引擎總結 MySQL儲存引擎總結

2021-10-20 23:10:03 字數 2726 閱讀 3100

儲存引擎

儲存引擎其實就是如何實現儲存資料,如何為儲存的資料建立索引以及如何更新,查詢資料等技術實現的方法。

儲存引擎的選擇

(1)是否需要支援事務;

(2)是否需要使用熱備;

(3)崩潰恢復:能否接受崩潰;

(4)是否需要外來鍵支援;

myisam

1)每當建立乙個myisam引擎的表時,就會在本地磁碟上建立三個檔案

1.tb_demo.frm,儲存表定義;

2.tb_demo.myd,儲存資料;

3.tb_demo.myi,儲存索引。

注意:資料檔案和索引檔案可以放置在不同的目錄,平均分配io,獲取更快的速度

2)myisam也是使用b+tree索引但是和innodb的在具體實現上有些不同。

適用性1.選擇密集型的表。myisam儲存引擎在篩選大量資料時非常迅速,這是它最突出的優點

2.插入密集型的表。myisam的併發插入特性允許同時選擇和插入資料。例如:myisam儲存引擎很適合管理郵件或web伺服器日誌資料。

3 myisam 這種儲存引擎不支援事務,不支援行級鎖,也不支援外來鍵,只支援併發插入的表鎖,主要用於高負載的select。

對訪問速度快,對事務完整性沒有要求或者以select、insert為主的應用基本都可以使用這個引擎來建立表。

4 myisam 型別的表支援三種不同的儲存結構:靜態型、動態型、壓縮型。

(1)靜態型:就是定義的表列的大小是固定(即不含有:xblob、xtext、varchar等長度可變的資料型別),這樣mysql就會自動使用靜態myisam格式。

使用靜態格式的表的效能比較高,因為在維護和訪問的時候以預定格式儲存資料時需要的開銷很低。但是這高效能是有空間換來的,因為在定義的時候是固定的,所以不管列中的值有多大,都會以最大值為準,佔據了整個空間。

(2)動態型:如果列(即使只有一列)定義為動態的(xblob, xtext, varchar等資料型別),這時myisam就自動使用動態型,雖然動態型的表占用了比靜態型表較少的空間,但帶來了效能的降低,因為如果某個欄位的內容發生改變則其位置很可能需要移動,這樣就會導致碎片的產生。隨著資料變化的怎多,碎片就會增加,資料訪問效能就會相應的降低。

對於因為碎片的原因而降低資料訪問性,有兩種解決辦法:

@1、盡可能使用靜態資料型別

@2、經常使用optimize table語句,他會整理表的碎片,恢復由於表的更新和刪除導致的空間丟失。

(3)壓縮型:如果在這個資料庫中建立的是在整個生命週期內唯讀的表,則這種情況就是用myisam的壓縮型表來減少空間的占用。

innodb

1nnodb是乙個健壯的事務型儲存引擎

2對比myisam的儲存引擎,innodb寫的處理效率差一些並且會占用更多的磁碟空間以保留資料和索引。

適用性1.更新密集的表。innodb儲存引擎特別適合處理多重併發的更新請求。

2.事務。innodb儲存引擎是支援事務的標準mysql儲存引擎。

3.自動災難恢復。與其它儲存引擎不同,innodb表能夠自動從災難中恢復。

4.外來鍵約束。mysql支援外來鍵的儲存引擎只有innodb。

5.支援自動增加列auto_increment屬性。

memory

1使用mysql memory儲存引擎的出發點是速度。為得到最快的響應時間,採用的邏輯儲存介質是系統記憶體。

2當mysqld守護程序崩潰時,所有的memory資料都會丟失

3要求儲存在memory資料表裡的資料使用的是長度不變的格式,

不能使用blob和text這樣的長度可變的資料型別,varchar是一種長度可變的型別,但因為它在mysql內部當做長度固定不變的char型別,所以可以使用。

4每個基於memory儲存引擎的表實際對應乙個磁碟檔案,該檔案的檔名和表名是相同的,型別為.frm。該檔案只儲存表的結構,而其資料檔案,都是儲存在記憶體中,這樣有利於對資料的快速處理,提高整個表的處理能力。

5 預設情況下,memory資料表使用雜湊(hash)索引,利用這種索引進行」相等比較」非常快,但是對」範圍比較」的速度就慢多了。因此,雜湊索引值適合使用在」=」和」<>」的操作符中,不適合使用在」」操作符中,也同樣不適合用在order by字句裡。如果確實要使用」」或betwen操作符,可以使用btree索引來加快速度。

適用性1.目標資料較小,而且被非常頻繁地訪問。在記憶體中存放資料,所以會造成記憶體的使用,可以通過引數max_heap_table_size控制memory表的大小,設定此引數,就可以限制memory表的最大大小。

2.如果資料是臨時的,而且要求必須立即可用,那麼就可以存放在記憶體表中。

3.儲存在memory表中的資料如果突然丟失,不會對應用服務產生實質的負面影響。

merge

1merge儲存引擎是一組myisam表的組合,這些myisam表結構必須完全相同

2merge表中並沒有資料,對merge型別的表可以進行查詢、更新、刪除的操作,這些操作實際上是對內部的myisam表進行操作。

適用性1對於伺服器日誌這種資訊,一般常用的儲存策略是將資料分成很多表,每個名稱與特定的時間端相關。例如:可以用12個相同的表來儲存伺服器日誌資料,每個錶用對應各個月份的名字來命名。當有必要基於所有12個日誌表的資料來生成報表,這意味著需要編寫並更新多表查詢,以反映這些表中的資訊。與其編寫這些可能出現錯誤的查詢,不如將這些表合併起來使用一條查詢,之後再刪除merge表,而不影響原來的資料,刪除merge表只是刪除merge表的定義,對內部的表沒有任何影響。

archive

1僅僅支援最基本的插入和查詢兩種功能。

適用性1用來當做倉庫使用。

mysql引擎總結 MySQL引擎總結

檢視引擎情況 show engines 檢視預設的資料庫配置 show variables like default storage engine 更改資料庫引擎 修改配置檔案my.ini,mysqld 最後新增為上default storage engine innodb,重啟服務 修改某張表的引...

MySQL引擎總結

儲存引擎檢視 mysql提供的查詢儲存引擎的功能 如圖 預設的引擎為innodb 這裡使用的sqlyog,mysql版本為5.5.28 檢視mysql版本的命令為 select version innodb儲存引擎 1 支援事務 2 支援行級鎖,併發較高時,效率較高 3 支援外來鍵約束 4 不支援全...

mysql引擎總結 MySQL儲存引擎對比總結

儲存引擎是資料庫的核心,對於mysql來說,儲存引擎是以外掛程式的形式執行的。雖然mysql支援種類繁多的儲存引擎,但是常用的就那麼幾種。這篇文章主要是對其進行乙個總結和對比。一 引言 在mysql5之後,支援的儲存引擎有十幾個,但是常用的就那麼幾種,而且預設支援的也是innodb,既然要進行乙個對...