MySQL存儲引擎筆記
存儲引擎概述
插件式存儲引擎是MySQL數據庫的重要特性之一,用戶可以根據應用的需要選擇如何存儲和索引數據、是否使用事物等 www.aiwalls.com
特點
MyISAM
InnoDB
Memory
事物安全
支持
鎖機制
表鎖
行鎖
表鎖
索引類型
B樹索引
全文索引
B樹索引
集群索引
B樹索引
哈希索引
數據緩存
支持
支持
索引緩存
支持
支持
支持
支持外鍵
www.aiwalls.com
支持
存儲引擎特性
MyISAM(ISAM → Indexed Sequential Access Method )引擎
a) MyISAM
劣勢:不支持事物、不支持外鍵
優勢:訪問速度快
適用:對事物完整性無要求、並發性不高或以select和insert操作為主的應用(web、數據倉庫等)
b) MyISAMy表存儲格式
靜態表:存儲迅速、容易緩存、故障恢復容易(註:數據末尾的空格會被自動剔除)
動態表:空間占用小,刪除和更新易導致碎片化(註:optimize table或myisamchk -r碎片整理)
壓縮表:每條記錄單獨壓縮、訪問開支小
InnoDB引擎
a) InnoDB
劣勢:寫操作效率差、占用更多磁盤(保留數據和索引)
優勢:事物安全、支持外鍵
適用:對事物完整性和並發下得一致性要求高並且有較多更新、刪除操作(InnoDB有效降低瞭刪除更新導致的表鎖定)的應用(計費、財務系統等)
b) 自動增長序列
1. 自動增長列必須是索引。
2. 如果是組合索引,則自動增長列必須是第一列(MyISAMy可為其他列,MyISAMy是按照前幾列排序後遞增的)
例:
create table autoincrease_demo_myisam
(t1 smallint not null auto_increment,
t2 smallint not null, www.aiwalls.com
name varchar(20),
index(t2,t1)
)engine =myisam;
依次插入以下數據
t1
2
2
2
3
3
2
2
2
2
2
3
3
2
2
t2
2
3
2
3
4
2
3
2
3
2
3
4
2
3
查看數據庫的中數據:select * from autoincrease_demo_myisam order by t2,t1;
+—-+—-+——+
| t1 | t2 | name |
+—-+—-+——+
| 1 | 2 | 2 |
| 2 | 2 | 3 |
| 3 | 2 | 2 |
| 4 | 2 | 2 |
| 5 | 2 | 3 |
| 6 | 2 | 2 |
| 7 | 2 | 3 |
| 8 | 2 | 2 |
| 9 | 2 | 2 |
| 10 | 2 | 3 |
| 1 | 3 | 3 |
| 2 | 3 | 4 |
| 3 | 3 | 3 |
| 4 | 3 | 4 |
+—-+—-+——+
c) 外鍵約束
MySQL支持外鍵的存儲引擎隻有InnoDB。在創建外鍵的時候,要求父表必須有對應的索引,字表在創建外鍵的時候也會創建對應的索引。外鍵關聯的操作主要有restrict、cascade、set null、no action. www.aiwalls.com
restrict、no action:在子表有關聯記錄的情況父表不能更新。
cascade:父表在更新或者刪除時,更新或者刪除子表對應記錄。
set null:父表在更新或者刪除時,字表對應的字段被set null。
d) 存儲方式
共享表空間存儲:所有的數據和索引保存在innodb_data_home_dir和innodb_data_file_path定義的表空間中,可以是多個文件。
獨立表空間存儲:每個表的數據和索引單獨保存在自己的表空間中。(單表備份和恢復較方便)
Memory引擎
a) 優點:Memory存儲引擎使用存儲在內存中的內容創建表,默認使用HASH索引。表訪問非常快(在啟動服務的時候可以使用–init-file選項將insert into ,select 或load data infile這樣的語句放入這個文件,就可以再服務啟動時從持久穩定的數據源裝載表。)
b) 缺點:表大小有限制,服務關閉表中的數據就會丟失
c) 適用:內容變化不頻繁,作為統計操作的中間結果表。
作者 xinhanggebuguake