一、MySQL 存儲引擎

MySQL存儲引擎


一、MyISAM

1.概要

1.MySQL5.5 之前版本默認存儲引擎

2.多用於系統表和臨時表(在排序、分組等操作中,當數量超過一定的大小後,由查詢優化器建立的臨時表)

3.存儲

  MYD:保存表的數據

  MYI:保存表的索引文件

2.特性

a).併發性與鎖級別:使用表級鎖而非行級鎖,讀取和寫入互斥,讀寫併發性能比較弱

b).不支持事物、不具備AICD特性:原子性、一致性、分離性、永久性

c).只會緩存索引:通過key_buffer_size來設置緩存索引,提高訪問性能減少磁盤IO的壓力,但是隻緩存索引,不緩存數據

d).不支持外鍵約束,只支持全文檢索

3.表損壞修復

檢查:check table tablename

修復:repair table tablename

通過命令行工具:myisamchk ,使用時需要停止服務,否則將造成更大的損壞

4.索引類型

1.支持全文索引

2.MySQL 5.7 之前版本唯一原生就支持全文索引的官方存儲引擎

3.支持textblog 類型字段建立前 500 個字符的前綴索引

4.支持數據壓縮,使用命令行:myisampack 進行獨立壓縮,讀取單行數據時,不必對整張表進行解壓。
壓縮後只能讀取,不能寫入

5.限制

1.MySQL5.0 版本之前默認表大小爲4G,如存儲大表則要修改MAX_RowsAVG_ROW_LENGTH

2.MYSQL5.0 版本之後默認支持256TB,足夠使用

6.使用場景

1.非事務型應用:數據倉庫、報表

2.只讀類應用

3.空間類應用:GPS


二、InnoDB

1.概要

1.MySQL5.5 及之後版本默認存儲引擎

2.事務型存儲引擎,支持ACID特性,適用於大量小事務

3.使用表空間進行數據存儲

  `innodb_file_per_table`

      ON : 獨立表空間:tablename.ibd

      OFF : 系統表空間:ibdataX(X爲數字,從1開始)

2.特性

a).InnoDB 是一種事務型存儲引擎

b).完全支持ACID特性

c).Redo Log:存儲已提交的事務,持久性的體現;Undo Log:存儲未提交的事務

d).支持行級鎖:可以最大程度的支持併發,由存儲引擎層實現的

  • 鎖?

    鎖的主要作用是管理共享資源的併發訪問,實現事務的隔離性

  • 鎖的類型?

共享鎖(讀鎖):相互不會阻塞,多個線程可以同時讀取

獨佔鎖(寫鎖):會阻塞其他的

  • 兼容性?
寫鎖 讀鎖
寫鎖 不兼容 不兼容
讀鎖 不兼容 兼容
  • 粒度(鎖定對象的最小單位)?

行級鎖

表級鎖

d).狀態檢查
show engine innodb status:兩次使用間隔 30S 以上,以保證採樣的豐富性

2.表空間的選擇

a).比較

  • 系統表空間無法簡單的收縮文件大小
  • 獨立表空間可以通過optimize table命令收縮系統文件
  • 系統表空間會產生IO瓶頸
  • 獨立表空間可以同時向多個文件刷新數據

b).建議

  • 對InnoDB 使用獨立表空間(MySQL5.6之後獨立表空間爲默認配置)

3.錶轉移的步驟

把原來存在於系統表空間中的錶轉移到獨立的表空間中的方法

步驟:

1.使用mysqldump導出所有數據庫表數據

2.停止MySQL服務,修改參數,並刪除InnoDB 相關文件(若主從服務架構,先停止從服務器)

3.重啓MySQL服務,重建InnoDB系統表空間

4.重新導入數據

4.使用場景

適用於大多數應用:全文索引、空間函數


三、存儲引擎的選擇(首選InnoDB)

參考條件

  • 事務:需要事務InnoDB ,不需要事務MyISAM
  • 備份:InnoDB 支持免費熱備方案
  • 崩潰恢復:MyISAM損壞概率高於InnoDB,恢復速度MyISAM比InnoDB更慢
  • 存儲引擎的特有特性:聚集索引優化-InnoDB;地理空間搜索:5.7之前的版本MyISAM,5.7之後InnoDB

除非萬不得已,否則不要混合使用多種存儲引擎

例如:

1.MyISAM 和InnoDB混合使用時,當事務出現回滾時,只有InnoDB的表中數據可回滾,MyISAM則無法回滾,導致邏輯不完整

2.混合使用多種引擎,無法在線熱備

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章