存储引擎:一种针对文件的读写/存取机制,存储引擎的建立基于表,并非基于库
(1)MyISAM (表锁)
特点:不支持事务,不支持外键,支持全文索引(从文本字段中截取部分,标识文本),但是对于一些在线分析处理操作速度快。它具有高速存储、检索以及全文搜索等功能。数据和索引分离开来,崩溃后无法安全恢复。使用较小的内存和空间磁盘。
适用场景:适合查询和插入为主的应用,查询性能明显优于InnoDB,索引是压缩后的,可以节省一部分空间。
底层:B+树,非聚集索引
文件组成:.frm文件存储表定义;.myd (MYData)文件存储表的数据;.myi (MYIndex)文件存储表的索引。
表锁(开销最小的策略锁,得到数据的写锁)
1.读锁(共享锁):读锁允许加其他锁(select自动加读锁)
2.写锁(独占写锁):不兼容其他的读写锁(updata,insert,delete加写锁)
(2)InnoDB (行锁)
特点:支持事务,支持外键,不支持全文索引,主要是面向在线事务处理方面的应用,特点是行锁设计。InnoDB给MYSQL提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎,innoDB是为处理据大数据量的在大性能设计的,他的CPU使用效率极高。通过索引查询时,加行锁,非索引查询时加表锁。处理速度相比于MYISAM稍慢。
适用场景:适合频繁修改涉及到安全的应用。Mysql5.5.5之后默认的存储引擎
底层:B+树,聚集索引
行锁(开销策略最大锁,并行性最大)
- 读锁(共享锁):共享读锁(select不自动加锁,事务的隔离性)
- 写锁(排它锁):排他其他所有锁(updata,insert,delete加写锁)
读不加锁,读写不冲突,读写同时进行,select只能查询修改前的数据。
行锁(索引),表锁(非索引)
(3)Memory
特点:将数据放在内存中,访问速度非常快,如果数据库重启或者宕机,表数据就会丢失。非常适合存储一些临时表,varchar()默认是按照char()存储的,浪费内存。不支持text(大文本字段)和BLOB(图片)类型。如果数据中有text和BLOB类型,数据库会把这些数字转换到磁盘上。
适用场景:主要用于临时表/临时文件存储,或者作为中间查找表,数据存在于内存,关闭服务器是时要考虑好数据的存储。
底层:哈希,哈希索引,一次定位
(4)Archive
特点:使用压缩算法将数据进行压缩后存储,压缩比例一般是1:10,主要提供插入和查询操作。只支持INSERT和SELECT操作,不支持删除和修改。
适用场景:适合存储大量的独立的数据。数据量大,不经常查询,主要存储日志数据