mysql核心 MySQL兩種核心對比

2021-10-25 14:41:17 字數 1304 閱讀 9308

mysql核心

關鍵字:全文索引 索引外接

兩種核心:myisam 和innodb

區別1.count(*)

myisam會儲存總行數,innodb不會儲存總行數,select count(*)時是一行一行進行掃瞄的,而myisam操作select count(*)時結果很快

實踐:資料量大的表,innodb就盡量不要使用select count(*)查詢,效能消耗大

備註:只有查詢全表時myisam才會直接返回結果,加where條件之後的話myisam和innodb原理相同

2.全文索引(

myisam支援全文索引,innodb5.6之前不支援全文索引

備註:資料量大併發量大時,不建議使用資料庫自帶的全文索引,應該使用索引外接的架構設計方法,myisam也不是最優選。

3.事務

myisam不支援事務,innodb支援事務

備註:事務具有commit,rollback這些崩潰修復能力;myisam在系統異常崩潰時可能造成檔案損壞。但是事務很耗效能,影響吞吐量,所以盡量只對一致性要求較高的業務使用事務。

4.外來鍵

myisam不支援外來鍵,innodb支援外來鍵

備註:資料量大併發量大時,都不建議使用外來鍵,要通過應用程式保證資料的完整。

5行鎖和表鎖

myisam只支援表鎖,innodb還支援行鎖

備註:myisam執行語句時,會對整個表加鎖,資料量大併發量大時,效能影響較大

innodb細粒度行鎖,在資料量大時,效能影響較小

實踐:select+insert時使用myisam,因為myisam在檔案尾部順序增加記錄速度快;但是大部分是讀寫混合,資料量大時就使用innodb

坑:innodb的行鎖是實現在索引上的,而不是鎖在屋裡行記錄上,如果沒有命中索引,就不能使用行鎖,將使用表鎖

1.5.2 示例

例如有使用者資訊表如下,且無其他索引:

t_user(uid, uname, age, ***) innodb;uid pk

那麼有如下結論:

update t_user set age=10 where uid=1; #命中索引,行鎖。

update t_user set age=10 where uid != 1; #未命中索引,表鎖。

update t_user set age=10 where name='shenjian'; #無索引,表鎖。

啟示:innodb務必建好索引,否則鎖粒度較大,會影響併發。

總結:

mysql核心比較 MySQL兩種核心對比

mysql核心 關鍵字 全文索引 索引外接 兩種核心 myisam 和innodb 區別1.count myisam會儲存總行數,innodb不會儲存總行數,select count 時是一行一行進行掃瞄的,而myisam操作select count 時結果很快 實踐 資料量大的表,innodb就盡...

mysql核心比較 MySQL兩種核心對比

mysql核心 關鍵字 全文索引 索引外接 兩種核心 myisam 和innodb 區別1.count myisam會儲存總行數,innodb不會儲存總行數,select count 時是一行一行進行掃瞄的,而myisam操作select count 時結果很快 實踐 資料量大的表,innodb就盡...

mysql的兩種引擎 mysql的兩種儲存引擎

背景 最近在使用spring data jpa操作mysql,在使用jpa的自動建表功能之後,處理多對多關係 manytomany的時候,spring data jpa會給中間表的兩個欄位都加上外來鍵引用。當前使用的版本預設的資料庫儲存引擎為myisam。這種儲存引擎是為資料庫查詢效能而生的,不支援...