存储引擎:MyISAM和InnoDB区别
Posted y_zilong
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了存储引擎:MyISAM和InnoDB区别相关的知识,希望对你有一定的参考价值。
mysql采用插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取相分离,可根据业务的需求选择合适的存储引擎
主流存储引擎:InnoDB,MyISAM
自mysql5.5之后,默认的存储引擎为InnoDB,之前默认的是MyISAM
#查看当前mysql提供的存储引擎
mysql> show engines;
#查看当前默认的存储引擎
mysql> show variables like '%storage_engine%';
#设置默认的存储引擎
[root@cent8_yzil ~]# vim /etc/my.cnf
[mysqld]
default_storage_engine=InnoDB
#查看库中所有表使用的存储引擎
mysql[(none)]> show table status from mysql;
#查看库中指定表使用的存储引擎
mysql [mysql]> show table status like 'user'\\G
#设置表的存储引擎
create table tb_name(...) engine=InnoDB
注意:同一个库中的表建议使用同一种存储引擎类型
MyISAM引擎特点
1、不支持事务
2、表级锁定
3、读写相互堵塞,写入不能读,读时不能写
4、只缓存索引
5、不支持外键约束
6、不支持聚簇索引
7、读取数据较快,占用资源较少
8、不支持MVCC(多版本并发控制机制)高并发
MyISAM存储引擎适用场景
-只读(或者写很少)
-表较小(可以接受长时间进行修复操作)
MyISAM引擎文件
表名.frm 表格式定义
表名.MYD 数据文件
表名.MYI 索引文件
InnoDB引擎特点
1、行级锁
2、支持事务,适合处理大量短期事物
3、读写堵塞与事务级别相关
4、可缓存数据和索引
5、支持聚簇索引
6、崩溃恢复性更好
7、支持MVCC高并发
8、从mysql5.5后支持全文索引
InnoDB数据库文件
数据存储于“表空间中”:
所有InnoDB表的数据和索引放置于同一个表空间中
每个表单独使用一个表空间存储表的数据和索引
在配置文件中:innodb_file_per_table=on
数据文件:ibdata1,ibdata2,存放在datadir定义的目录下
表格式定义:表名.ibd,数据和索引文件
表名.frm,表结构定义文件
存放在datadir定义的每个数据库对应的目录下
总结:
MyISAM更关注性能,存取速度快;
InnoDB更关注事务,更安全。所谓事务,指多个操作被当作一个整体对待。比如:购物这个事务,包含下单、付款、收货等操作。如果中间一个操作出错,要回滚至初始状态。比如:付完款,商家没货,就要退款。
以上是关于存储引擎:MyISAM和InnoDB区别的主要内容,如果未能解决你的问题,请参考以下文章