存储引擎:存储数据,建立索引,更新\查询数据等技术的实现方式。
存储引擎是基于表的。
show engines;
show variables like '%storage_engine%';
INNODB
# 5.5之后,默认
# 支持事务
# 行级锁,提高并发访问性能
# 支持外键约束,保证数据完整性和正确性
# 涉及到的磁盘文件
frm:存储表结构
ibd:表空间文件,存储数据和索引
MYISAM
# 5.5之前的默认引擎
# 不支持事务,不支持外键
# 支持表锁,不支持行锁
# 访问速度快
# 涉及到的磁盘文件
frm:存储表结构
MYD:存储数据
MYI:存储索引
# 适合:
应用以读和插入为主,且对事务完整性,并发性要求不高
现在被mongodb替代
即使操作一条记录也会锁住整个表,不适合高并发的操作
缓冲池只缓存索引,不缓存数据
节省资源,消耗少,简单业务
崩溃后无法安全恢复
针对数据统计有额外的常数存储,故而count(*)的查询效率很高
其他引擎
Archive用于数据存档,只支持插入和查询,在5.5之后支持索引
支持auto_increment列属性,auto_increment列可以具有唯一索引或非唯一索引
尝试在任何其他列上创建索引会导致错误
拥有很好的压缩机制,使用zlib压缩库
应用场景:日志和数据收集,有很高的插入速度,查询的支持较差
CSV引擎可以将CSV文件作为MYSQL的表来处理,不支持索引
数据文件是CSV格式
Memory引擎,表结构存储到磁盘上,将数据存储到内存里
要求存储的数据是长度不变的类型
支持哈希索引和B+树索引
Memory表的大小是受限制的,取决于两个参数,max_rows和max_heap_table_size(default 16MB)
应用场景:目标数据较小,数据是临时的,需要频繁访问