什么是存储引擎
数据库存储引擎是数据库底层软件组件,数据库管理系统使用数据引擎进行创建、查询、更新和删除数据操作。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎还可以获得特定的功能。
现在许多数据库管理系统都支持多种不同的存储引擎。MySQL 的核心就是存储引擎。
在MySQL客户端中,使用以下命令可以查看MySQL支持的引擎。
mysql>show engines
1.mysql存储引擎
MyISAM 存储引擎不支持事务,也不支持外键,特点是访问速度快,对事务完整性没有要求,以 SELECT、INSERT 为主的应用基本都可以使用这个引擎来创建表。
fm(存储表定义)
MYD(MYData,存储数据)
MYI(MYIndex,存储索引)
每个 MyISAM 表都有一个标志,服务器或 myisamchk 程序在检査 MyISAM 数据表时会对这个标志进行设置。MyISAM 表还有一个标志用来表明该数据表在上次使用后是不是被正常的关闭了。
MyISAM 表还支持3种不同的存储格式:
静态(固定长度)表
动态表
压缩表
2.InnoDB存储引擎
InnoDB是一个
InnoDB 是一个健壮的事务型存储引擎,这种存储引擎已经被很多互联网公司使用,为用户操作非常大的数据存储提供了一个强大的解决方案。
1)更新密集的表:InnoDB 存储引擎特别适合处理多重并发的更新请求。
2)事务:InnoDB 存储引擎是支持事务的标准 MySQL存储引擎。
3)自动灾难恢复:与其它存储引擎不同,InnoDB表能够自动从灾难中恢复。
4)外键约束:MySQL 支持外键的存储引擎只有InnoDB.
5)支持自动增加列 AUTO INCREMENT 届性。
一般来说,如果需要事务支持,并且有较高的并发读取频率,InnoDB是不错的选择。
3.关于myisam 与 innoDB选择使用
myisam和innoDB是MySQL数据库提供的两种存储引擎。两者的优劣各有千秋。InnoDB会支持一些关系数据库的高级功能。myisam的性能更优,占用的储存空间少。
1.如果应用程序一定要使用事务,毫无疑问要选择InnoDB 引擎。但要注意,InnoDB的行级锁是有条件的。在 where 条件没有使用主键时,照样会锁全表。比如 DELETE FROMmytable 这样的删除语句。
2.如果应用程序对查询性能要求较高,就要使用MYISAM了。MyISAM 索引和数据是分开的,而且其索引是压缩的,可以更好地利用内存。所以它的查询性能明显优于InnoDB.压缩后的索引也能节约一些磁盘空间。
4.修改默认的存储引擎
修改默认的存储引繁有四种方法,分别如下。
(1)通过alter table修改。
mysql>alter table user_info engine=myisam;
(2)通过修改my.cnf,指定默认存储引擎并重启服务。
vim my.cnf
default-storage-engine=InnoDB
(3)通过create table创建表时指定存储引擎。
mysql>create table engineTest(id int) engine=myisam;
(4)通过MySQL_convert_table_format 转化存储引擎。
yum -y install perl-DBL perl_DBD-MySQL
/usr/local/mysql/bin/mysql_convet_table_format
--user=root --password='123456' --sock=/tmp/mysql.sock auth