mysql各種存儲引擎(一)
mysql各種存儲引擎一 myisam myisam文件格式 myisam文件修復 myisam表的存儲格式 innodb存儲引擎 支持事物 自動增長列 外鍵約束 存儲結構
MyISAM
MyISAM文件格式
frm文件 存儲表的結構定義數據 MYD文件 具體的數據文件 MYI文件 表索引文件
myISAM存儲引擎只緩存索引,對數據文件采用操作系統緩存,如果索引數據超過系統所分配的緩存空間時也會采用操作系統來緩存索引.
MyISAM文件修復
通過使用check table語句檢測MyISAM表的狀態,然后用REPAIR TABLE語句修復損壞的表 使用myisamchk工具修復,如果有用戶同時在操作這張表,那么即使表是沒有問題的,也很有可能提示表已損壞,故進行檢查時,應當先停掉mysql服務。如果不想停止服務,至少應該mysqladmin flush-tables操作。
[? JavaStudy git:(master) myisamchk -e books.MYI Checking MyISAM file: books.MYI Data records: 0 Deleted blocks: 0 - check file-size - check record delete-chain - check key delete-chain - check index reference - check data record references index: 1 - check records and index references
MyISAM表的存儲格式
靜態(固定長度)表 默認格式,固定非變長字段,存儲速度快,容易緩存,易恢復,缺點所占空間較多,且利用率不高 動態可變長度表,可變長存儲,恢復困難,行變化較大時會被分成碎片,需要使用myisamchk -r 來修復 壓縮表 存儲空間最小,每行進行壓縮,使用數據庫提供的myisanpack工具壓縮。
Innodb存儲引擎
支持事物
4個事物級別:
– read uncommitted 最低級別,以下情況均無法保證
– read committed 可避免臟讀情況發生
– repeatable read 可避免臟讀、不可重復讀情況的發生 數據庫的默認級別
– serializable 可避免臟讀、不可重復讀、虛讀情況的發生
自動增長列
auto_increment屬性,表在添加數據的時候,可以插入空值,該列可以自動增加數據
外鍵約束
它降低了數據庫的查詢效率,數據庫表之間的耦合度更加緊密,要求父表必須有相對應的索引,字表在創建時回添加相應的索引。
存儲結構
.frm文件 數據的結構定義文件 .ibd文件 數據與索引文件
(1)使用共享表空間
所有的表盒索引數據存放在同一個表空間中,數據和索引在innodb_data_home_dir和innodb_data_file_path定義的表空間中,可以使用一個或多個數據文件
(2)使用多表空間
表結構存放在.frm文件中,但是每個表的數據和索引文件存放在一個單獨的.ibd文件中.要使用多表空間存儲時,需要設置innodb_file_per_table參數,這樣每個數據庫的表都會生成一個數據空間
查看如下:
mysql> show variables like '%per_table%'; +-----------------------+-------+ | Variable_name | Value | +-----------------------+-------+ | innodb_file_per_table | ON | +-----------------------+-------+ 1 row in set (0.00 sec)
修改前需要關閉數據庫,然后在配置文件my.cnf中設置或者添加該參數innodb_file_per_table = 1,重啟數據庫服務。