MySQL引擎區別Innodb vs MyISAM

2022-09-19 04:00:16 字數 909 閱讀 6926

mysql是我們常用的資料庫,它有兩種不同的儲存引擎,弄清楚兩者之間的區別,才能夠在選擇時做到心中有數。我們先看結論:

innodb

myisam

支援事務、外來鍵 

不支援事、外來鍵

聚簇索引  

非聚簇索引

不支援全文索引(5.6.4之後也支援了)

支援全文索引

支援到行鎖

支援表鎖

不儲存表資料總條數

儲存表資料總條數

讀寫阻塞與實務相關

讀會阻塞寫

在mysql 5.1之前的版本中,預設的搜尋引擎是myisam,從mysql 5.5之後的版本中,預設的搜尋引擎變更為innodb。

因此在進行選擇時可以有相應的取捨:

myisam

盡量索引(快取機制)

調整讀寫優先順序,根據實際需求確保重要操作更優先

啟用延遲插入改善大批量寫入效能

盡量順序操作讓insert資料都寫入到尾部,減少阻塞

分解大的操作,降低單個操作的阻塞時間

降低併發數,某些高併發場景通過應用來進行排隊機制

對於相對靜態的資料,充分利用query cache可以極大的提高訪問效率

myisam的count只有在全表掃瞄的時候特別高效,帶有其他條件的count都需要進行實際的資料訪問

innodb 

主鍵盡可能小,避免給secondary index帶來過大的空間負擔

避免全表掃瞄,因為會使用表鎖

盡可能快取所有的索引和資料,提高響應速度

在大批量小插入的時候,盡量自己控制事務而不要使用autocommit自動提交

合理設定innodb_flush_log_at_trx_commit引數值,不要過度追求安全性

避免主鍵更新,因為這會帶來大量的資料移動

參考:

MySQL儲存引擎 InnoDB

為什麼innodb不將總數存起來?innodb直接count 會遍歷全表 沒有where條件 雖然結果準確,但會導致效能問題。按照效率排序的話,count 字段 innodb一棵b 樹可以存放多少行資料?這個問題的簡單回答是 約2千萬。為什麼是這麼多呢?因為這是可以算出來的,要搞清楚這個問題,我們先...

MYISAM引擎和INNODB引擎的區別

一 功能性的比較 1.innodb支援事務,支援外來鍵約束,是乙個事務性的儲存引擎 表級鎖定的主要是myisam,memory,csv等一些非事務性儲存引擎 二 鎖的比較 1 innodb主要應用於行級鎖 row level 2 myisam主要應用於表級鎖 table level 三 各個鎖的比較...

MySQL的儲存引擎INNODB

1 一般情況下,mysql會預設提供多種儲存引擎,你可以通過下面的檢視 看你的mysql現在已提供什麼儲存引擎 mysql show engines 看你的mysql當前預設的儲存引擎 mysql show variables like storage engine 你要看某個錶用了什麼引擎 在顯示...