Mysql执行引擎
显示mysql中所有的执行引擎
- 可以使用 SHOW ENGINES 命令 可以查看Mysql的所有执行引擎我们 可以到 默认的执行引擎是innoDB 支持事务,行级锁定和外键
修改Mysql的执行引擎
方法1:真接修改。
在数据多的时候比较慢,而且在修改时会影响读取性能。user是操作的表,innoDB是默认的存储引擎。 修改成MyISAM
复制代码代码如下:
alter table user ENGINE =MyISAM;
方法2:.导出,导入。
这个比较容易操作,直接把导出来的sql文件给改了,然后再导回去。用mysqldump ,本人常用的是navicate那样更容易上手。友情提醒风险较大。
方法3:.创建,插入。
这个比第一种速度快, 安全性比第二种高,推荐。分2步操作
a.创建表,先创建一个和要操作表一样的表,然后更改存储引擎为目标引擎。
复制代码代码如下:
CREATE TABLE my_tmp_table LIKE my_table;
ALTER TABLE my_tmp_table ENGINE=InnoDB;
什么是MyISAM
- MyISAM(在5.5版本之前)是MySQL关系数据库管理系统的默认储存引擎。它从旧的ISAM代码扩展出许多有用的功能。在新版本的MySQL中,InnoDB引擎由于其对事务,参照完整性,以及更高的并发性等优点开始广泛的取代MyISAM。
- 每一个MyISAM表都对应于硬盘上的三个文件。这三个文件有一样的文件名,但是有不同的扩展名以指示其类型用途:.frm文件保存表的定义,但是这个文件并不是MyISAM引擎的一部,而是服务器的一部分;.MYD保存表的数据;.MYI是表的索引文件。
什么是InnoDB
- InnoDB(在5.5版本之后是mysql的默认执行引擎)是MySQL的另一个存储引擎,正成为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。较之于其它的存储引擎它的优点是它支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(即对外键的支持)。
MyISAM存储引擎的特点
在5.5版本之前,MyISAM是MySQL的默认存储引擎,MyISAM并发性比较差,使用场景比较少主要的特点是:
- 不支持事务操作,ACID事务也就不存在了,这一设计是为了性能和效率考虑的。
- 不支持外键操作、如果强行加增加外键,MySQL不会报错,只不过外键不起作用。
- MyIASM默认的锁粒度是表级锁,所有并发性能比较差加锁比较快,锁冲突比较少,不太容易发生死锁的情况。
- MyIASM会在磁盘上存储文件,文件名和表名相同,扩展名分别是 .frm(存储定义) .MYD(MYData,存储数据)、MYI(myIndex存储索引)。这里需要特别注意的是MyISAM只缓存索引文件,并不缓存数据文件
- MyISAM 支持的索引类型有全局索引(Full-Text)、B-Tree索引、R-Tree索引
Full-Text:他的出现是为了解决针对文本的查询效率较低的问题。
B-Tree索引:所有的索引节点都按照平衡二叉树的数据结构来存储,所有的索引数据节点,都在叶子节点中。
R-Tree索引:它的存储方式和B-Tree所以有写区别的,主要设计用于存储空间和多维的数据的字段,相对于BTree索引,RTree优势在于范围查找。
- 数据库所在主机如果宕机了,MyISAM的数据文件就难以恢复。
- 增删改查性能方面:select性能较高,适用查询较多的情况
InnoDB存储引擎的特点
mysql在5.5之后的版本将默认的存储引擎改成了InnoDB,相对于MyIASM,InnoDB 存储有较大的改变,他主要的特点是:
- 支持事务操作,具有事务ACID特性,默认的隔离级别是可重复读,通过MVCC(并发版本控制)来实现。能够解决脏读和不可重复读的问题。
- InnoDB支持外键操作
- InnoDB默认的锁颗粒度 行级锁,并发性能比较好,会发生死锁
- 和MyISAM一样的是,InnoDB存储引擎也有,.frm文件存储表结构定义,但是不同是,InnoDB的表数据与索引数据是存储在一起的,都是位于B+Tree的叶子节点上,而MyISAM的表数据结构和索引数据分开的。
- InnoDB 有安全的文件,这个日志文件用于恢复因数据库崩溃或其他情况导致的数据丢失问题,保证数据的一致性。
- InnoDB和MyIASM支持的索引类型相同,但具体实现因为文件结构的不同有很大的差异.
- 增删改查性能方面,如果执行大量的增删改操作,推荐使用InnoDB存储引擎,它在删除操作时是对行删除,不会重新建表
MyISAM 和 InnoDB存储引擎的区别对比
- 锁的颗粒度方面:由于锁的粒度不同,InnoDB比MyISAM支持更高的并发;InnoDB的锁粒度为行级锁,MyISAM的锁粒度为表锁,行锁需要对每一行进行加锁,所以行锁的开销更大,但是可以解决脏读和不可重读的问题,相对来说也更容易发生死锁
- 可恢复性上:由于InnoDB是有事务日志,所以在产生由于数据库崩溃等条件后,可以根据日志文件进行恢复。而MyISAM则没有事务日志。
- 查询性能:MyISAM要优于InnoDB,因为InnoDB在查询过程中,是维护数据缓存,而且查询过程是先定位到行所在的数据块,然后在从数据块中定位到数据所在的内存地址可以找到数据
- 表结构文件上:MyISAM 的表结构文件包括 .frm(表结构定义),.MYI(索引)、.MYD(数据);而InnDB的表数据文件为 .ibd和.frm(表结构定义)