MYSQL儲存引擎InnoDB和myisam區別

2021-07-11 06:33:28 字數 1322 閱讀 1843

mysql5.5之後的預設儲存引擎

如果你為乙個表指定auto_increment列,在資料詞典裡的innodb表控制代碼包含乙個名為自動增長計數器的計數器,它被用在為該列賦新值。

自動增長計數器僅被儲存在主記憶體中,而不是存在磁碟上

關於該計算器的演算法實現,請參考

auto_increment列在innodb裡如何工作

innodb 中不儲存表的具體行數,也就是說,執行select count(*) from table時,innodb要掃瞄一遍整個表來計算有多少行

最好是where查詢跟的主鍵以外的索引列,因為innodb主鍵是聚集索引,輔助索引是非聚集。如果查聚集索引的話,需要連同資料一起返回,很慢。

即myisam同乙個表上的讀鎖和寫鎖是互斥的,myisam併發讀寫時如果等待佇列中既有讀請求又有寫請求,預設寫請求的優先順序高,即使讀請求先到,所以myisam不適合於有大量查詢和修改並存的情況,那樣查詢程序會長時間阻塞。因為myisam是鎖表,所以某項讀操作比較耗時會使其他寫程序餓死

每表乙個auto_incremen列的內部處理。

myisam為insert和update操作自動更新這一列。這使得auto_increment列更快(至少10%)。在序列頂的值被刪除之後就不能再利用。(當auto_increment列被定義為多列索引的最後一列,可以出現重使用從序列頂部刪除的值的情況)。

auto_increment值可用alter table或myisamch來重置

對於auto_increment型別的字段,innodb中必須包含只有該字段的索引,但是在myisam表中,可以和其他字段一起建立聯合索引

更好和更快的auto_increment處理

select count(*) from table,myisam只要簡單的讀出儲存好的行數,注意的是,當count(*)語句包含 where條件時,兩種表的操作是一樣的,最好走索引

全文索引是指對char、varchar和text中的每個詞(停用詞除外)建立倒排序索引。myisam的全文索引其實沒啥用,因為它不支援中文分詞,必須由使用者分詞後加入空格再寫到資料表裡,而且少於4個漢字的詞會和停用詞一樣被忽略掉。

行級鎖定的優點:

行級鎖定的缺點:

在以下情況下,表鎖定優先於頁級或行級鎖定:

update tbl_name set

column = value

where unique_key_col = key_value ;

delete

from tbl_name where unique_key_col = key_value ;

MySQL儲存引擎 InnoDB

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

MySQL的儲存引擎INNODB

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

mysql的innodb儲存引擎

innodb是支援事務的儲存引擎,支援acid特性的acid 指資料庫事務正確執行的四個基本要素的縮寫 包含 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 更適合處理大量的小事務,小事務正常都會被提交,很少會被回滾,在資料儲存的...